BigQuery加载-控制字符作为分隔符

时间:2019-02-01 19:22:32

标签: google-bigquery

我们要加载的文件中,字段值由“单位分隔符” 0x1f
分隔。 根据{{​​3}},如果无法打印,则应使用UTF-8编码。

我使用bq CLI,尝试将-F的{​​{1}}参数传递给U+001F,但无济于事:BigQuery error in load operation: Field delimiter must be a single character, found:"U+001F"
0x1F或`\ x1f(带引号或不带引号)都没有运气。

我编码是否错误,或者是bq还是API中的错误?

编辑
在与资源管理器一起玩后,发现它是不喜欢定界符的API。 除了可打印的定界符,您还可以使用\t,但显然也可以使用未记录的\b(退格键)和\f(表单域)。
tab可以是自由格式文本字段中有效的用户输入字符,因此我们需要使用控制字符(从'unit sep'转换后)

EDIT2:
注意,\f作为分隔符不工作精细通过API直接而不是bq CLI(Field delimiter must be a single character, found:"\f")。

3 个答案:

答案 0 :(得分:3)

实际上,受GCP支持的支持,该方法可在Linux上运行:

bq load --autodetect --field_delimiter=$(printf '\x1f') [DATASET].[TABLE] gs://[BUCKET]/simple.csv

在Windows上,在命令行上返回/生成控制字符并不是那么简单。如果使用PowerShell,则更容易。

我同意@Felipe,目前这是bq CLI工具中的一个限制,但是在我的脑海中,只要在参数上加上.decode('utf-8'),就可以轻松地将其固定在源代码中以字节为单位,这样

 --field_delimiter=\x1f 

可以在任何平台上按原样工作。

希望bq CLI team会考虑增强功能。

答案 1 :(得分:0)

您发现了CLI的局限性:它不会接受API会接受的所有字符。

如edit2中所述,解决方案是通过替代方法直接使用API​​。

答案 2 :(得分:0)

您可以指定bq load --field_delimiter=$'\x01'