- Fix Druid filtering on alternative time columns represented as LONG
- Updated dependencies
- Fix escaping in Druid
like
- Send less javascript to Druid
- Fix typo in
Dataset#fullJoin
(publish error)
- Allow re-splitting complex expressions
- Fix totals calculation for resplit measures
- Support Druid timeseries sorted descending
- Fixed Druid planning bug where contains case insensitivity preference would be swallowed up when LHS is a concatenation over a single dimension
- Fixed Druid planning bug with concatenating a dimension to itself
- Fix
in
filtering on fancy lookup expressions
- Fix previous NPE for real
- Fix NPE
- Support contains on Druid expressions
- Changed how concat is calculated in Druid to me more efficient
- Shortcut to decompose certain compare type queries
- Handle concat with different expressions
- Handle empty string sources
- Update dependencies
- Use expressions in fallback when extraction functions fail
- Correct time bucket inflation in case of string dates (as returned by topN queries)
- Move some Dataset methods into statics
- Nothing. Npm is not replicating so it is a crap shoot to install 0.18.7 hence bumping version and publishing again to hopefully kickstart it into action.
- avoid topN for filtered on time aggregate sort
- allow multiple resplit measures
- basic resplit ability
- use
usePrefixForLastTerm
- Remove aggressive fallback simplification
- Added
termsDelegate
and fullText search prototype - fix error where virtual columns can refer to themselves
- added number bucket expression support
- Control query concurrency
- Removing support for Druid < 0.10.0, cleaning up code
- Support for MatchExpression in Druid expression builder
- Better error messages for unsupported Druid expressions in older (< 0.11.0) Druid
- Fixed legacy cross functional test
- Use expressions to handle cases where an extraction function would have been used instead
- Changed Druid expression division to work how the post aggregators used to work (return 0 when dividing by 0)
- Add
.ln()
to expression parser - Fix Druid concat to null out on empty strings
- Use expressions in post aggs
- Added
LogExpression
(.log()
)
- Fix bug where CSV/TSV headers were not being escaped
- Added
attributeTitle
to TabulatorOptions - Added
attributeFilter
to TabulatorOptions
- Support complex boolean math expressions for Druid
- Correctly gate
scan
query on 0.11.0
- More forgiving deserialization of sets
- Use
scan
query instead ofselect
- Adding more tests
- Fix null handling in IN filters for SQL drivers
- Correctly handle IN filters on virtualColumns
- Also working in filter
- Started virtualColumn implementation
Expression#defineEnvironment
works recursively
- Better stringification of strings in expressions
- Change the External#introspect method to take a
depth: "deep" | "default" | "shallow"
parameter instead ofdeep: boolean
(deep: true
=>depth: deep
) - Druid introspect route will query time range on
depth: "default"
and not query it ondepth: "shallow"
- Fix
Set#isAtomicType
to work correctly forNULL
- Respect filtered aggregations for quantile and custom aggregates
- Allow
maxRows
and support dataset trimming
- Now setting
outputType
in Druid dimension specs
- Updated tests for Druid 0.11.0
- Added and enabled previously skipped tests
- Fixed bug where
Set(null)
andSet("null")
would be subsets of each other
- Added
round: true
to cardinality
- Fixed issue with milti-value list filter
- Fixed planning for nested JS postagg
- Fixed tests
- Updated dependencies
TimeRangeExpression.getQualifiedDurationDescription
now accepts a capitalization flag- Testing with newer Druid
- Support Druid
DOUBLE
types
- Allow deep introspection
- Move away from any-promise towards native promises
- Fix bug in several PlyQL functions where string inputs were interpreted as plywood expressions leading to errors on values with spaces
- Fix bug in
LOCATE
- Fix bug in
.cast("NUMBER")
- Change tests to work with node8
- Updated examples
- Add engine property to
rawQueries
- Allow
rawQueries
collection for externals
- Fix bug in formula parsing related to tuning
- Added tuning support to PlyQL
- Add support for a
tuning
config for Druid approximate histograms - Add support for a finalizing postAgg for a custom aggregation
- Replaced TS
Lookup<T>
type with the TS2.2 nativeRecord<string, T>
- Fix typos
- Add
AttributeInfo#changeType
- Fix to DSV in dataset for NULL type columns
- Changed the meaning of IN to be a subset only operation with back compat provisions.
- Better build process for people with older npm
keys
not emitted if empty forDataset#toJS
Set#simplify
=>Set#simplifyCover
Set#generalUnion
=>Set#unionCover
Set#generalIntersect
=>Set#intersectCover
- Fixed SQL externals for filtered
Min
andMax
aggregations - Fixed an instance of unhanded error in pipe
- Simplification for case independent contains
- Allow
table_alias.*
in PlyQL - Support new features added on Druid 0.10.0
- Allow approxHistogram calculation on numeric columns
- verboseRequesterFactory parameter
preQuery
renamed toonQuery
- verboseRequesterFactory callback parameters now get a single argument with lots of info
- verboseRequesterFactory will now name queries
- PlyQL: support for
IF()
CASE WHEN THEN END
, andNULLIF()
DruidExternal
fixed some problems with JS code generationDruidExternal
support for planning.then().fallback()
DruidExternal
GroupBys will not correctly use 'numeric' orderDruidExternal
fixed GroupBy output name
- Stable release
Major breaking changes in this release
- Druid: Allow count distinct on cross product (e.g.
$data.countDistinct($a ++ $b)
) - Transition to TS 2.1
- Better division by 0 handling
- Extracted Requester type definition into
plywood-base-api
- Switched from
Q
toany-promise
- Use has-own-prop library
- Changed
Dataset#toJS
to return an object rather than just thedata
array - Datasets now actively maintain their
keys
array Dataset#flatten
now returns a new (flat)Dataset
and thus theparentName
option is no longer supported- In
Dataset#flatten
,Dataset#ToCSV
, e.t.corderedColumns
option is no longer supported use.select()
instead - Added
columnOrdering
option toDataset#flatten
with values'as-seen'
and'keys-first'
Dataset#getColumns
is now justreturn this.flatten(options).attributes
Dataset#getNestedColumns
was removed- Added
ThenExpression
- Expressions have all been standardized to apply to Sets as well as atomics
- Fix
NULL
types handling everywhere - Remove
AttributeInfo#serialize
- Removed
AttributeInfo#special
,UniqueAttributeInfo
,ThetaAttributeInfo
, andHistogramAttributeInfo
- Added
AttributeInfo.nativeType
that stores the original database type of the attribute DruidExernal
will now be able to plan usinglongSum
DruidExernal
added ability to split on constant- Removed deprecation warnings and deleted crutches from the 0.15 release
MinExpression
andMaxExpression
will now correctly output their type asTIME
if the argument isTIME
- Experimental support for DruidSQL
DruidExternal
correctly defining numeric ordering in topN metricsSpecsDruidExternal
will now explicitly setfromNext: false
when paginating select
- Fixed bug where bucketing in a multi-value dimension was off for non UTC timezones
- Version check now works with all parts of the version
- Fix error in version check that had trouble with versions like
0.10.0
- PlyQL: Support for
SHOW CHARACTER SET
- PlyQL: Support for
SHOW COLLATION
- PlyQL: Tolerance for encoding defined strings
N'Hello World'
and_utf8'Hello World'
- Added timezone based formatting ability
- Better publish script
- Fixing JS code gen for number casting
+x !== parseFloat(x)
whenx == " "
- Implement
bucket
extractionFn for DruidExternal
- Added
Range#isFinite
- Fixed logic around heatmap query
- Added more CAST options
- Fixed special attributes not reporting
unsplitable
correctly - Fixed numberInflater sometimes returning
NaN
- All Dataset computation and aggregation functions now take expressions instead of functions.
Each has a corresponding function that takes a function like the old API.
So
Dataset#apply(name, x)
now expectsx
to be and expression butDataset#applyFn(name, x)
has the old API AttributeInfo#type
defaults toSTRING
- Removed PlyQL parser from plywood-lite
- Druid countDistinct planing no longer does
byRow: true
to be more inline with how plywood aggregates work in general - Fix countDistinct to be able to accept all expression types
- Default step in timeShift and timeRange maker functions
- Added a plywood-light version with no externals or requester utils
- Run tests against Druid groupBy v2 + fix tests
- Fixed time resolution in
derivedAttributes
- Better handling for derivedAttributes by type checking them in the external constructor
- Fixed
rawAttributes
when empty - made
Expression#distribute
work for nested expression
- removed deprecated uses of
isInstanceOf
- 'action' expressions no longer return
{ op: "ref", name: "_" }
in their toJS further improving API back compat.
- export
CustomDruidAggregations
andCustomDruidTransforms
types
- better API backwards compatibility
- Typo
- Totally reworked internal representation all BlahAction classes are now BlahExpression
- removed
.custom
use.customAggregate
- changed
lookup
tolookupFn
- changed
LimitAction#limit
toLimitExpression#value
- changed
QuantileAction#quantile
toQuantileExpression#value
- Fixed NOT() in Druid having clause
- removed
Expression#actionize
- removed
Expression#firstAction
- removed
Expression#lastAction
- removed
Expression#headActions
- removed
Expression#popAction
use.operand
instead
- Sets do not auto-unify elements
- Limit action works with Infinity
- Update deps
- Collect works for all types
- Fixed public / private typings
- Smart query limiting
- Support for
show status
- Fixed BETWEEN bounds
- Added collect action
- No more context folding
- More efficient query parallelisation
- Misc cleanup
- Better type injection with TDI
- Quarter supported
- Allow bug fixes in deps
- Transition to better build system
- Support Druid
regexFiltered
andlistFiltered
dim specs
- Respect PlyQL column ordering by generating extra select statements
- SegmentMetadata passes context also
- Upgraded to latest PEG.js
- Fixed bug in OR action
- Support case insensitive RefExpression
- PlyQL
SHOW
query rewriting is case insensitive - Moved methods out of
plywood
and intoimmutable-class
:plywood.find
toSimpleArray.find
plywood.findIndex
toSimpleArray.findIndex
plywood.findByName
toNamedArray.findByName
plywood.findIndexByName
toNamedArray.findIndexByName
plywood.overrideByName
toNamedArray.overrideByName
plywood.overridesByName
toNamedArray.overridesByName
- Fixes in
AttributeInfo#valueOf
- Added
AttributeInfo#change
- Transitioned to newer immutable tester
- Renamed
customExtractionFns
tocustomTransforms
- Using lowercase
alphanumeric
indimensionOrder
- Renamed
customAction
tocustomAggregationAction
- Changed to build to use external modules
- Moved methods out of
plywood.helper
, specifically:helper.parseJSON
toDataset.parseJSON
helper.expressionLookupFromJS
toExpression.expressionLookupFromJS
helper.expressionLookupToJS
toExpression.expressionLookupToJS
helper.find
toplywood.find
helper.findIndex
toplywood.findIndex
helper.findByName
toplywood.findByName
helper.findIndexByName
toplywood.findIndexByName
helper.overrideByName
toplywood.overrideByName
helper.overridesByName
toplywood.overridesByName
helper.shallowCopy
toplywood.shallowCopy
helper.deduplicateSort
toplywood.deduplicateSort
helper.mapLookup
toplywood.mapLookup
helper.emptyLookup
toplywood.emptyLookup
helper.nonEmptyLookup
toplywood.nonEmptyLookup
helper.verboseRequesterFactory
toplywood.verboseRequesterFactory
helper.retryRequesterFactory
toplywood.retryRequesterFactory
helper.concurrentLimitRequesterFactory
toplywood.concurrentLimitRequesterFactory
helper.promiseWhile
toplywood.promiseWhile
- Moved
simpleLocator
out - Removed
retryRequester
which was deprecated
- Expressions can parse pure JSON also
- Updated file notice headers
- Updated dependencies
- Added
STRING_RANGE
type - Core: Support for
.indexOf()
,.transformCase()
action - PlyQL: Support for
LOCATE
,UCASE
,LCASE
- No JS globals in JS functions
- Core: Support for
.cast()
action - PlyQL: Support for
CAST
,FROM_UNIXTIME
,UNIX_TIMESTAMP
actions - DruidExternal: fix for
.cast('number').numberBucket()
- Cleaned up npm package and updated dependencies
- Externals take account of
requester
for comparisons - Misc cleanup
- Made
Range
and abstract class - PlyQL: Fixed
AS
for tables, also"AS"
keyword is now optional (like in MySQL) - Added
.cardinality()
action - Added
CARDINALITY
to PlyQL
- Takes advantage of most features in Druid 0.9.1
- Removed untested RangeAttributeInfo with helpful error message to use numbers instead
- DruidExternal: added
-legacy-lookups
version flag - Trying to secondary filter on
__time
in Druid <= 0.9.1 now throws an error (at planning stage) as it is impossible - Added
.length()
action - Added
LENGTH
,LEN
, andCHAR_LENGTH
to PlyQL
- DruidExternal: Segment metadata works on union dataSource
- Using abstract classes (forces dependency on TypeScript >= 1.6)
- Rename
dataSource
andtable
tosource
- Added
External.getExternalFor
- Fix bug where JS reserved words could not be used in aggregates
- Compute expression HEAD also
- PlyQL: From(sub query) works
- Native quantiles also work
- Added compare to ranges so they sort correctly
- DruidExternal: Fix bug where
$blah / 10
did not work in split - DruidExternal: Fix bug where
1 + $blah
did not cast to number - DruidExternal: Pure
.fallback()
now works - Removed some dead code
- DruidExternal: Ability to split on a secondary time dimension by
PT2H
e.t.c. - PlyQL:
SHOW FULL TABLES
rewrites correctly
- Druid Select query no longer bound to 10000 max limit and will use iterative strategy
- Numeric Dimensions can be aggregated
- Better simplification of
.is(TimeRange)
and.is(NumberRange)
- Removed some dead code
- Druid: Default to JavaScript filter for negative bounds in bound filter
- Druid Fixed number range behaviour in nested splits
- Add tests around negative numbers
- Added PostgresExternal
- Refactored common SQL External functionality into SQLExternal base class
- Fixed timezone bucketing in MySQL External
- Support countDistinct on Theta sketches
- Druid GroupBy will no longer receive arbitrary limit
- Made filters on non primary time dimensions work in DruidExternal
- Added basic tests for legacy Druid versions
timeFloor
andtimeBucket
actions make sure duration is floorable
helper.overrideByName
maintains original order- DruidExternal explicitly sends UTC timestamps
- Ability to define delegates in Externals
- selectAction now type checks and only allows defined attributes to be selected
DruidExternal.getSourceList
now returns the sources in a sorted order- Adding range extent
- New chronoshift fixes bug with flooring
PT12H
- Fixed parsing of
NULL
in set expressions - Added information function to PlyQL
- Allow PlyQL to support
SHOW SESSION VARIABLES WHERE ...
rewriting
- Fix distribution of
SUM(1) => COUNT()
- Added
DruidExternal.getVersion
- Fixed post computation tasks
- Added support for
USE
on PlyQL - PlyQL allows
NULL
in set literal e.g.{'a', 'b', NULL}
- PlyQL describe query now rewrites
- Fixed problem with DruidExternal having filter generating an OR instead of an AND for time ranges
- Fixed problem with filtering on multi-dimensional dimensions with a lookup
- Added
Dataset#findDatumByAttribute
- Fixed bug where flatten would fail on an empty nested dataset.
- Accidentally published again.
- Added
finalizer
option toDataset#toTabular
- Fixed quoting when exporting to CSV or TSV
- Fixed DruidExternal sometimes generating an invalid Druid query when doing a multi-dimensional split that includes time
- Unsuppress datasource when it is limited or selected
- Better show query support
- Made Dataset#apply and Dataset#select truly immutable
- Fix Druid introspection bug on JS ingestion aggregators
- Allow data-less PlyQL queries like
SELECT 1+1
- Default PlyQL
AS
text now matches SQL implementation.
- Removed duplicate entry that killed in strict mode.
- Added ability to do ISO8601 in PlyQL time literals
- Ability to sort in select queries
- Fix
timeFloor
now work with limit
- Fixed bug where select queries including multi value dimensions would sometimes error out in DruidExternal
- Changed
helper.overrideByName
tohelper.overridesByName
,helper.overrideByName
now does a single override - Added
finalLineBreak
option toDataset#toTabular
,Dataset#toCSV
,Dataset#toTSV
(default to 'include' for tabular and 'suppress' for toCSV and toTSV) Dataset
now always has introspected dimensions- Support for zero Intervals in PlyQL
- Support for
DATE_FORMAT
in PlyQL as used in MySQL forTIME_FLOOR
- Dramatically reduced PlyQL parser size
- Added
YEAR
as a possibletimePart
value - Added
CURDATE
,PI
,YEAR
,MONTH
,WEEK_OF_YEAR
,DAY_OF_YEAR
,DAY_OF_MONTH
,DAY_OF_WEEK
,HOUR
,MINUTE
,SECOND
,DATE
,CURRENT_TIMESTAMP
,LOCALTIME
,LOCALTIMESTAMP
,UTC_TIMESTAMP
,SYSDATE
,CURRENT_DATE
,UTC_DATE
,DAY_OF_YEAR
,DOY
,DOW
,DAYOFMONTH
,DAY
,WEEKOFYEAR
, andWEEK
to PlyQL - Fixed bug where
DAY_OF_YEAR
,DAY_OF_MONTH
, andDAY_OF_WEEK
was zero indexed - Added support for
timeFloor
split in Druid external
- Added SET expressions to PlyQL
{'A', 'B', 'C'}
- PlyQL can now parse IN with arbitrary expression on right hand side
- Fix .match() not working on SET/STRING
- Moved date parsing to Chronoshift and updated to latest Chronoshift
- Parser can now configure a timezone within which it will parse 'local' date strings
- Optimized post processing by not calculating the filter for final splits
- Added ability to define the timezone through the environment
- Timezone always defaults to UTC
- Date parsing no longer done by PlyQL parser
- Added tests for legacy Druid versions
- Added convenient filtered aggregators to PlyQL like:
SUM(added WHERE cityName = 'San Francisco')
- Fixed PlyQL incorrectly parsing
SELECT COUNT(page)
- Fixed null handling in extractionFns for Druid 0.8.3
- Fixed overlap on
[null]
- Enabled all Druid 0.9.0 tests (testing using Druid 0.9.0-iap1)
- DruidExternal now supports lookups on SET/STRING dimensions
- Fixed bug where DruidExternal did not work with filtered cardinality aggregator
- New immutable class methods
- Allow derivedAttributes to be specified in ExternalJS
- derivedAttributes can now be used in filters and splits
- Fixed bugs in type inference
- Fixed
.substr()
getJS to work correctly with nulls
- Added (experimental) rollup mode to all Externals, only implemented in DruidExternal
- Derived attributes now work for DruidExternal
- DruidExternal now supports boolean ref filters like:
$wiki.filter($isAnonymous)
- added
getSourceList
to externals - Fixed bug in expression simplification where
$s.contains('A') and $x.is('B') => false
- Respect unsplitable measures in DruidExternal
- DruidExternal timeAttribute now defaults to
__time
- Moved find* methods into helper
- Externals can re-introspect
- Fixed Druid 'select' failing on time interval outside of Druid cluster
- Using Imply Analytics Platform 1.1.1 docker image for Druid tests
- Derived columns in Druid select will now trigger if version is
/^0.9.0-iap/
version
is now a parameter on all External- In Druid external
druidVersion
was renamed toversion
- Fixed MySQL translation of .is() action to use null safe equals (<=>)
- Fixed MySQL translation of .contains()
- Added
<=>
to PlyQL - Druid external now introspects version and does not make broken query
- Support for new features in Druid 0.9.0
- Fix for Druid "bound" / "between" filter
- Much faster PlyQL parsing
- The FROM clause in PlyQL now accepts relaxed table names allowing for:
SELECT * FROM my-table*is:the/best_table
- Set
skipEmptyBuckets: "true"
in timeseries queries to get the Plywood expected behaviour
- Added
.select('attr1', 'attr2', 'attr3')
action allowingSELECT attr1, attr2, attr3 FROM ...
to be expressed in PlyQL - Added support for
.quantile(p)
aggregator in DruidExternal (using approximateHistograms) - Better support for filtered aggregates in DruidExternal
- Custom type guards for all the modal classes
- New 'value' mode in externals.
$wikipedia.sum($added)
is now computable. - More relaxed date literal parsing in PlyQL
- Fix native
overlap
calculation
- Support Date and Timestamp literal as described here: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html
- Upgraded to TypeScript 1.8
- SELECT queries in Druid are now mindful of the attributes and inflate values correctly.
- All cross functional tests now running with rollup.
- Temporary columns are no longer being returned by Druid.
- Fixed issue with
.in(...).not()
in the DruidExternal
overlap
now allows STRING arguments, simplifies toin
- DruidExternal will use topNs for defined small splits even when there is no limit set (like
BOOLEAN
,timeBucket(HOUR_OF_DAY)
) - Fixed bug for MySQLExternal not dealing well with BOOLEAN splits
- Added
overlap
action - Added multi-database query test / example
- Fixed sorting direction when sorting on a split in Druid
- Ability to do filtered aggregations on SQL drivers
== NULL
works correctly with SQL drivers
- MySQL functional tests can now run in docker
- Better checks for expression types in aggregates
- Better handling for filtered attributes now allows filtered attributes on
countDistinct
andcustom
- Fixed sorting for numeric columns in DruidExternal
- Add
absolute
,power
,sqrt
,fallback
action - Corresponding
ABS
,POW/POWER
,EXP
,SQRT
, andIFNULL/FALLBACK
to PlyQL - Fixed type checking in
InAction
- Fixed
match
on nulls to returnnull
- Support
SELECT DISTINCT
syntax in PlyQL
- Add
timeRange
action (TIME_RANGE
in PlyQL) - not supported by DruidExternal yet
- Add
timeFloor
action (TIME_FLOOR
in PlyQL) - not supported by DruidExternal yet - Rename unused
offsetTime
action totimeShift
(TIME_SHIFT
in PlyQL) and addstep
parameter - not supported by DruidExternal yet - Fixed how
concat
works on nulls to return null - Added
.isnt
and.negate
to expression parsing grammar (they were mistakenly excluded) - Added
MATCH
function to PlyQL - Timezone parameter is now optional in all the
time*
functions in Plywood and PlyQL - Added
NOW()
to PlyQL - Better DruidExternal column introspection error detection
- Allow parsing of
DESCRIBE
verb for PlyQL
- Changed
avoidSegmentMetadata
tointrospectionStrategy: 'datasource-get'
defaults to'segment-metadata-fallback'
- Brand new introspection code for
druidExternal
no moreuseSegmentMetadata
flag instead there is aavoidSegmentMetadata
flag - Fix
.lookup()
stringification - PlyQL comments are treated like they are in MySQL:
--
needs to be followed by a space,#
starts a comment, and/* ... */
inline and multiline comments are supported
- Removing d3 dependency and minimizing code size
- Fixed interval conversion to add a millisecond and not a second
- Allow for filtering on exact date in DruidExternal
- Fixed missing error message when invalid interval is given
- In DruidExternal a time attribute will no longer collide with an existing attribute
- Added ability to write
$('time').in('2015-03-03Z', '2015-10-10Z')
- Added ability to parse
$time.in('2015-03-03Z', '2015-10-10Z')
- Fixed bug in
$number.in(1, 2)
syntax
- Native
timePart
now works
- Updated Druid External to use
doubleMin
anddoubleMax
.
- Fixed bug in sorting with
null
in the list - Updated to latest typescript (1.7.5)
- Added the
.lookup('my_lookup')
expression that translates to a query time lookup in Druid - Added the corresponding
LOOKUP
function to PlyQL - Fixed split simplification
- In PlyQL
COUNT(blah)
returns the count where blah is notnull
in accordance with SQL standard. - Added query IDs to
verboseRequester
- Flashed out PlyQL docs
- Fixed bug in parameter parsing with leading numbers
- Added
.extract()
function - Added
EXTRACT
function to PlyQL - Fixed bug in PlyQL where a space before the trailing ) would cause a parse error
- More docs :-)
- DruidExternal supports extractionFn filters such as
.filter($x.substr(0, 1) === 'D')
- added
druidVersion
to DruidExternal to support feature differentiation - added native Druid substring filter support or druidVersion >= 0.9.0
- Added some docs
- Created plywood-proxy
- PlyQL
LIKE
now works to SQL spec (addedESCAPE
clause) - Added
CONTAINS
clause to PlyQL - Added
REGEXP
clause to PlyQL
- Added
firstAction
andlastAction
to all expressions popAction
no longer takes an optional action type (warning added)
- DruidExternal now works with upper/lower time bound only
- Fixed string handling in parser arguments
- Added
contains
to expression parsing grammar
- Added
timePart
to MySQL dialect - Added time part option for
MONTH_OF_YEAR
- Fixed bug to ensure
Dataset#flatten
works with empty datasets
- Added
Set#toggle
- Added simplification rule for
.sort(X).filter(Y) => .filter(Y).sort(X)
- Added simplification rule for
.sort(X).sort(X) => .sort(X)
- Added simplification rule for
.not().not() => nothing
- Added
External#updateAttribute
- Fixed
Dataset#average
- Latest Chronoshift allows for PT15M bucketing, e.t.c.
- Better apply, filter, limit sorting
- Multi-dim group dy uses granularity when it can.
- Fixed bug in
Set#add
- added tonic example: https://tonicdev.com/npm/plywood
- Refactored DruidExternal
- DruidExternal now supports multi-dim splits
- Timezone (2nd argument) in
timeBucket
is now optional, defaults to UTC - Fixed native
dataset.max
- Better docs
- Context is now added passed along in a DruidExternal
- Added
Expression.concat
- Added
CONCAT
to the PlyQL parser
- Paving the road for multi-dimensional splits
.split({ Page: '$page', User: '$user' })
- Fixed problems with SELECT queries
- Allow for SQL parsing of
SELECT *
- Fix support for
sort
andlimit
in SELECT queries - Better escaping in MySQL driver
- Changed JS fallbacks in DruidExternal to use native code generators and removed some null bugs.
- Added more rules to the SQL parser:
IS
,LIKE
, and awareness ofUPDATE
,SET
, e.t.c
- Changed the return type of
Expression.parseSQL
to return and object with the keysverb
,expression
, andtable
Expression.parseSQL(blah)
==>Expression.parseSQL(blah).expression
- In PlyQL changed the meaning of
GROUP BY <number>
to be a reference to a column (just like in MySQL and Postgres)
- Added support for case sensitive (
normal
) / case insensitive (ignoreCase
) contains. - Improved concat action support in Druid
- Chain expression
.toJS()
now returnsaction
instead ofactions
array if there is only one action. Both are still valid to parse. - Misc bug fixes
- Added SortAction DESCENDING, ASCENDING, toggleDirection
- DruidExternal guards against duplicate aggs and postAggs
- Changed attribute definitions to be an array instead of an object and added deprecation message.