我们要加载的文件中,字段值由“单位分隔符” 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"
)。
答案 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'