根据我对 CSV 有多挑剔的经验,我强烈怀疑存在编码问题。如果遇到非法字符或无法识别,许多 CSV 阅读器只会丢弃数据。我不知道 BigQuery 在这方面做了什么,但考虑到他们在加载 CSV 文件方面的帮助,值得一试以确保您的数据是干净的,并在尝试其他任何事情之前根据 BigQuery 的需要。
限制
将 CSV 数据从 Cloud Storage 加载到 BigQuery 时,请注意以下事项:
- CSV 文件不支持嵌套或重复数据。
- 如果您使用 gzip 压缩 BigQuery 无法并行读取数据。将压缩的 CSV 数据加载到 BigQuery 比加载未压缩的数据要慢。
- 您不能在同一个加载作业中同时包含压缩文件和未压缩文件。
- 加载 CSV 或 JSON 数据时,DATE 列中的值必须使用破折号 (-) 分隔符,并且日期必须采用以下格式:YYYY-MM-DD(年-月-日)。
- 加载 JSON 或 CSV 数据时,TIMESTAMP 列中的值必须使用破折号 (-) 分隔符作为时间戳的日期部分,并且日期必须采用以下格式:YYYY-MM-DD(年-月-日) . 时间戳的 hh:mm:ss(小时-分钟-秒)部分必须使用冒号 (:) 分隔符。
CSV 编码
BigQuery 要求 CSV 数据采用 UTF-8 编码。如果您的 CSV 文件包含以 ISO-8859-1(也称为 Latin-1)格式编码的数据,则应在加载数据时明确指定编码,以便将其转换为 UTF-8。
CSV 文件中的分隔符可以是任何 ISO-8859-1 单字节字符。要使用 128-255 范围内的字符,您必须将该字符编码为 UTF-8。BigQuery 将字符串转换为 ISO-8859-1 编码,并使用编码字符串的第一个字节将数据拆分为原始二进制状态。
BigQuery 需要UTF-8,您提供CP-1252。在我看来,CP-1252 现在应该已经灭绝了。所以要么它看起来像这样,要么你有一个不太关心遵循最新标准的程序(那些存在,我每天都使用其中一个)。
此外,请确保您的本地化设置正确。一些 CSV 以;
代替分隔,
,一些语言环境考虑,
千位分隔符,而另一些则将其视为小数分隔符。因此,请验证您的 CSV 的语言环境是否与您的架构的语言环境相同。
您的默认位置可以在 .bigqueryrc 文件中设置。可以使用bq
命令设置架构的位置,如下所示:
bq --location=location load \
--source_format=format \
project_id:dataset.table_name \
path_to_source \
schema
在哪里:
location
是您所在位置的名称。该--location
标志是可选的。例如,如果您在东京地区使用 BigQuery,则可以将标志的值设置为asia-northeast1
。您可以使用.bigqueryrc 文件为该位置设置默认值。
- 格式为
NEWLINE_DELIMITED_JSON
或CSV
。
- project_id:dataset.table_name 是您的项目 ID。
- project_id:dataset.table_name 是包含要加载数据的表的数据集。
- project_id:dataset.table_name 是要加载数据的表的名称。
- path_to_source 是 CSV 或 JSON 数据文件在本地计算机或 Cloud Storage 中的位置。
- schema 是内联模式定义。
例子:
输入以下命令以从默认项目中命名myfile.csv
为的本地 CSV 文件加载数据。mydataset.mytable
模式是手动内联指定的。
bq load \
--source_format=CSV \
mydataset.mytable \
./myfile.csv \
qtr:STRING,sales:FLOAT,year:STRING
更多关于地点的信息。
根据您提供的详细信息,您的编码和语言环境都值得怀疑。