如何让 Apache Drill 理解 csv 文件中的显式“NULL”?
How to make Apache Drill understand explicit `NULL` in a csv file?
假设我有这个 CSV 文件:
a,b
NULL,1
1,2
然后我尝试做一些查询:
> SELECT * FROM dfs.`/path/to/foo.csv`;
+-------+----+
| a | b |
+-------+----+
| NULL | 1 |
| 1 | 2 |
+-------+----+
2 rows selected
> SELECT * FROM dfs.`/path/to/foo.csv` WHERE a is NULL;
+----+----+
| a | b |
+----+----+
+----+----+
No rows selected
> SELECT * FROM dfs.`/path/to/foo.csv` WHERE a is NOT NULL;
+-------+----+
| a | b |
+-------+----+
| NULL | 1 |
| 1 | 2 |
+-------+----+
2 rows selected
> SELECT * FROM dfs.`/path/to/foo.csv` WHERE a > 0;
Error: SYSTEM ERROR: NumberFormatException: NULL
Fragment 0:0
Apache Drill 似乎正在考虑 NULL
作为字符串。
即使我将其替换为空字符串 (sed -i 's/NULL//g' foo.csv
),Apache Drill 仍然认为这些值不为空。
有什么方法可以让它将 NULL
(或空值)视为……好吧……null?
我使用的是最新发布版本:1.9.0。
绝对可以!
- 在 http://[your drillbit ip]:8047 打开控制台并点击
右上角的 "Options" 按钮。
- 找到 "drill.exec.functions.cast_empty_string_to_null" 并将其设置为 true。
假设我有这个 CSV 文件:
a,b
NULL,1
1,2
然后我尝试做一些查询:
> SELECT * FROM dfs.`/path/to/foo.csv`;
+-------+----+
| a | b |
+-------+----+
| NULL | 1 |
| 1 | 2 |
+-------+----+
2 rows selected
> SELECT * FROM dfs.`/path/to/foo.csv` WHERE a is NULL;
+----+----+
| a | b |
+----+----+
+----+----+
No rows selected
> SELECT * FROM dfs.`/path/to/foo.csv` WHERE a is NOT NULL;
+-------+----+
| a | b |
+-------+----+
| NULL | 1 |
| 1 | 2 |
+-------+----+
2 rows selected
> SELECT * FROM dfs.`/path/to/foo.csv` WHERE a > 0;
Error: SYSTEM ERROR: NumberFormatException: NULL
Fragment 0:0
Apache Drill 似乎正在考虑 NULL
作为字符串。
即使我将其替换为空字符串 (sed -i 's/NULL//g' foo.csv
),Apache Drill 仍然认为这些值不为空。
有什么方法可以让它将 NULL
(或空值)视为……好吧……null?
我使用的是最新发布版本:1.9.0。
绝对可以!
- 在 http://[your drillbit ip]:8047 打开控制台并点击 右上角的 "Options" 按钮。
- 找到 "drill.exec.functions.cast_empty_string_to_null" 并将其设置为 true。