导入 BigQuery 时指定转义字符。“错误:双引号 (") 和字段分隔符之间的数据。”

Eri*_*een 5 google-bigquery

我正在尝试将大量 .csv 文件导入 Google BigQuery。

我的一个字符串列有时包含一个数组,其中包含用\'s转义的双引号。例子:

... ,"{\"ex1\":\"somestuffhere\"\,\"ex2\":\"somestuffhere\"\,\"ex3\":\"somestuffhere\"}",...

我相信这个问题是由 BigQuery 引起的,默认情况下期望双引号被另一个双引号转义 - ""。我已经尝试向参数发送不同的参数,--quote但它没有像我希望的那样工作。

我正在尝试的当前命令行加载命令:

bq load --noreplace --skip_leading_rows=1 --allow_jagged_rows='true' --ignore_unknown_values='true' --quote='"' --source_format=CSV TestDataset.cmdLineTest gs://s3_data_transfers/Events_10422/LIVE/* myschema.json

无论如何我可以让平台接受这些行吗?还是我被迫调查预处理步骤?该表将根据发送的新 csv 每天更新,因此理想情况下尽量将预处理步骤保持在最低限度。

谢谢!

enl*_*lin 1

我认为这个问题是由于--quote你已经指出的论点造成的。由于"是引用 CSV 数据部分的默认值,因此如果您的数据包含". 我一直在使用一些类似的数据(使用\")进行测试,并且 BigQuery 返回相同的错误:

Error: Data between close double quote (") and field separator.
Run Code Online (Sandbox Code Playgroud)

解决办法就是将--quoteflag指定给另一个字符(这样就解决了不连贯的问题)。就我而言,它适用于'. 以下命令对我有用:

bq --location=US load --autodetect --source_format=CSV --quote "'" MY_DATASET.MY_TABLE MY_CSV_FILE
Run Code Online (Sandbox Code Playgroud)

确保您的数据不包含',否则您应该找到另一个字符或将其设置为空字符串,如文档所述。有关此标志的详细信息,请参阅此文档。