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 
可以在任何平台上正常工作


希望代码将考虑增强。p> 您可以指定

bq load--field_delimiter=$'\x01'

+1。这真的为我节省了很多分析的时间。我们在ascii码中使用大于127的分隔符,所以我们必须弄清楚如何在BQLOAD命令中对其进行编码。当我们使用八进制代码(“\0001”)时,我们收到错误,抱怨bq只将第一个字符作为分隔符,但您的帖子帮助我们正确加载了数据。您好,我正在尝试加载包含/u0001的CSV文件,我正在使用下面的命令bq load--autodetect--field_delimiter='/u0001'dataset_name.table_name/home/directory/event_file.csv。但我在加载操作中得到错误BigQuery错误:字段分隔符必须是单个字符,找到:“/u0001”。