【问题标题】:Escape character in file文件中的转义字符
【发布时间】:2020-01-19 09:40:51
【问题描述】:

我有几百个文件代表 400Gb 的 CSV 格式数据,具体说明如下

  • 封闭式:双引号
  • 分隔符:逗号
  • 转义字符:反斜杠

我的数据可能是

a,30,"product, A","my product : \"good product\""

我认为 BQ 将数据评估为

第 1 列:a 第 2 栏:30 第 3 栏:产品 第 4 栏:A col 5:我的产品:“好产品”

我想要

第 1 列:a 第 2 栏:30 第 3 栏:产品,A col 4:我的产品:“好产品”

可以在不使用数据流或数据准备的情况下加载此类文件

bq load --noreplace --source_format=CSV --max_bad_records=1000000 --allow_jagged_rows ods.my_file gs://file/file.csv.gz

我的数据被转移了,bigquery 没有加载行

读取数据时出错,错误信息:Could not parse 'XXX' as int 用于从位置 2121 开始的字段(位置 49)

右双引号 (") 和字段分隔符之间的数据。

【问题讨论】:

  • 这些 CSV 是从 MySQL 导出的吗?检查medium.com/google-cloud/…
  • Tks Felipe,这是我无法更改的 anotehr 系统的摘录。无法定义转义字符?
  • 可能最快的方法是使用 CLI 工具来转换转义
  • 同意费利佩。我最近做了类似的改造。这适用于 Mac,但适用于 Linux 的语法略有不同。 sed -i '' 's/\"\"STRING_WITH_EXTRA_QUOTE_HERE\"/\"STRING_WITH_EXTRA_QUOTE_HERE\"/g' YOUR_FILE.csv

标签: google-bigquery


【解决方案1】:

尝试 cmets 中的选项,或在 BigQuery 中进行解析,尝试加载每一行原始数据并像这样运行 UDF:

SELECT csv.cols[SAFE_OFFSET(0)] a
  , csv.cols[SAFE_OFFSET(1)] b
  ,csv.cols[SAFE_OFFSET(2)] c
  ,csv.cols[SAFE_OFFSET(3)] d
  ,csv.cols[SAFE_OFFSET(4)] e
  ,csv.cols[SAFE_OFFSET(5)] f
FROM (
  SELECT fhoffa.x.parse_csv('hello,"dealing here, with", some \" quoted words, all is fine, good one?,"even a , in between"')  csv
)

参考:https://medium.com/@hoffa/new-in-bigquery-persistent-udfs-c9ea4100fd83

【讨论】:

    猜你喜欢
    • 2018-05-26
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2016-07-12
    相关资源
    最近更新 更多