For updates follow @implydata on Twitter.
- Druid: Default to JavaScript filter for negative bounds in bound filter
- 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.