如何让 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。

绝对可以!

  1. http://[your drillbit ip]:8047 打开控制台并点击 右上角的 "Options" 按钮。
  2. 找到 "drill.exec.functions.cast_empty_string_to_null" 并将其设置为 true。