[explore] proper filtering of NULLs and '' (#4651)

* [WiP] [explore] proper filtering of NULLs and ''

TODO: handling of Druid equivalents

* Unit tests

* Some refactoring

* [druid] fix 'Unorderable types' when col has nuls

Error "unorderable types: str() < int()" occurs when grouping by a
numerical Druid colummn that contains null values.

* druid/pydruid returns strings in the datafram with NAs for nulls
* Superset has custom logic around get_fillna_for_col that fills in the
NULLs based on declared column type (FLOAT here), so now we have a mixed
bag of type in the series
* pandas chokes on pivot_table or groupby operations as it cannot sorts
mixed types

The approach here is to stringify and fillna('<NULL>') to get a
consistent series.

* typo

* Fix druid_func tests

* Addressing more comments

* last touches
This commit is contained in:
Maxime Beauchemin
2018-04-17 22:26:21 -07:00
committed by GitHub
parent 44c2d5bdab
commit eac97ce9f2
15 changed files with 153 additions and 57 deletions

View File

@@ -1,6 +1,6 @@
import { it, describe } from 'mocha';
import { expect } from 'chai';
import { isTruthy } from '../../../src/utils/common';
import { isTruthy, optionFromValue } from '../../../src/utils/common';
describe('utils/common', () => {
describe('isTruthy', () => {
@@ -40,4 +40,14 @@ describe('utils/common', () => {
expect(isTruthy('false')).to.equal(false);
});
});
describe('optionFromValue', () => {
it('converts values as expected', () => {
expect(optionFromValue(false)).to.deep.equal({ value: false, label: '<false>' });
expect(optionFromValue(true)).to.deep.equal({ value: true, label: '<true>' });
expect(optionFromValue(null)).to.deep.equal({ value: '<NULL>', label: '<NULL>' });
expect(optionFromValue('')).to.deep.equal({ value: '', label: '<empty string>' });
expect(optionFromValue('foo')).to.deep.equal({ value: 'foo', label: 'foo' });
expect(optionFromValue(5)).to.deep.equal({ value: 5, label: '5' });
});
});
});