Google bigquery BigQuery加载-控制字符作为分隔符
我们有要加载的文件,其中字段值由“单位分隔符”分隔,Google bigquery BigQuery加载-控制字符作为分隔符,google-bigquery,Google Bigquery,我们有要加载的文件,其中字段值由“单位分隔符”分隔,0x1f 根据,如果不可打印,则应使用UTF-8编码 使用bqCLI,我尝试用U+001F传递-F参数,但无效:BigQuery加载操作错误:字段分隔符必须是单个字符,找到:“U+001F” 使用0x1F或`\x1f(带引号或不带引号)都不会带来好运 我的编码是否有误,或者它是bq或API中的错误 编辑: 在使用explorer之后,发现是API不喜欢分隔符。 除了可打印的分隔符外,您还可以使用\t,也可以使用未记录的\b(退格)和\f(表单字
0x1f
根据,如果不可打印,则应使用UTF-8编码 使用
bq
CLI,我尝试用U+001F
传递-F
参数,但无效:BigQuery加载操作错误:字段分隔符必须是单个字符,找到:“U+001F”
使用
0x1F
或`\x1f(带引号或不带引号)都不会带来好运
我的编码是否有误,或者它是bq
或API中的错误
编辑:在使用explorer之后,发现是API不喜欢分隔符。 除了可打印的分隔符外,您还可以使用
\t
,也可以使用未记录的\b
(退格)和\f
(表单字段)。选项卡
可能是用户在自由格式文本字段中输入的有效字符,因此我们需要使用控制字符(从“unit sep”转换后)
EDIT2::请注意,
\f
作为分隔符确实可以直接通过API正常工作,但不能通过bq
CLI(字段分隔符必须是单个字符,可以找到:“\f”
)。您发现了CLI的一个限制:它不能接受API使用的所有字符
正如edit2中所说,解决方案是通过其他方法直接进入API。实际上,得益于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 load--field_delimiter=$'\x01'