在 drill table 中使用 `store.format`='csv' 时如何处理字符串字段中没有转义逗号

How to deal with no escape commas in string fields when using `store.format`='csv' in drill table

当使用钻取脚本将一组 parquet 文件转换为 csv 时,运行 遇到问题,其中某些字段中有逗号。这会导致问题,因为 drill 似乎不会在转换后的文件中的字段周围自动添加任何转义 "<field>"'<field>' 字符(例如,对于看起来像 "Soft-drink, Large" 的字符串值)。

脚本看起来像

/opt/mapr/drill/drill-1.11.0/bin/sqlline \
        -u jdbc:drill:zk=node001:5181,node002:5181,node003:5181 \
        -n $(tail -n+1 $basedir/src/drill-creds.txt | head -1) \
        -p $(tail -n+2 $basedir/src/drill-creds.txt | head -1) \
        --run=$sqldir

其中 sql 被钻 运行 看起来像

alter session set `store.format`='csv';
create table dfs.myworkspace.`/path/to/csv/destination` as 
select .... 
from dfs.myworkspace.`/path/to/origin/files`

有没有人有解决这个问题的通用方法?有没有办法将转义字符添加到转换后的 csv 文件中(尝试检查文档 (https://drill.apache.org/docs/create-table-as-ctas/),但找不到任何相关内容)?

您可以使用 TSV 或 PSV 格式,或者通过配置文件存储插件的格式插件来更新 CSV 单元格的分隔符:

在Drill UI中选择Storage,然后Update dfs storage plugin,找到CSV in formats 并添加 delimiter 属性 和所需的值。

"csv": {
  "type": "text",
  "extensions": [
    "csv2"
  ],
  "skipFirstLine": false,
  "extractHeader": true,
  "delimiter": "^"
},

另外请检查escape 属性

查看更多: https://drill.apache.org/docs/text-files-csv-tsv-psv/#use-a-distributed-file-system