排查数据转移问题

本页面介绍了在将数据转移或加载到 BigQuery 时如何排查问题。您可以解决与 BigQuery Data Transfer Service、 Google Cloud、Amazon Web Services (AWS)、Cloud SQL 和虚拟私有云 (VPC) 网络之间的网络连接以及从 Cloud Storage 加载 CSV 数据作业相关的常见错误。

排查转移作业配置问题

如需了解如何解决 BigQuery Data Transfer Service 的问题,请参阅排查转移配置问题。

如果您设置或运行来自外部或合作伙伴数据源的转移作业,请参阅排查第三方转移作业设置问题。

使用 INFORMATION_SCHEMA 视图诊断作业

您可以查询 INFORMATION_SCHEMA.JOBS 视图,以近乎实时地诊断失败或缓慢的加载作业和传输查询。如果加载作业或转移查询失败,请检查 error_result 和 errors 列,以确定根本原因,例如架构不匹配、配额限制或权限错误。

以下示例查询 INFORMATION_SCHEMA.JOBS 以检索过去 24 小时内失败的加载作业的错误详情:

SELECT
  job_id,
  creation_time,
  user_email,
  error_result.reason AS error_reason,
  error_result.message AS error_message,
  errors
FROM
  `region-REGION`.INFORMATION_SCHEMA.JOBS
WHERE
  job_type = 'LOAD'
  AND state = 'DONE'
  AND error_result IS NOT NULL
  AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
ORDER BY
  creation_time DESC;

将 <var>REGION</var> 替换为数据集区域名称,例如 us 或 europe-west1。

排查转移网络连接问题

从外部云提供商或私有数据库实例转移数据时,网络路由或防火墙规则可能会阻止连接。请参阅以下部分,排查 VPN 附件和专用网络连接方面的问题。

AWS-Google Cloud VPN 和网络连接

如果您在设置网络连接时遇到问题,请执行以下操作:

  • 确保 VPN 连接在 AWS 控制台和 Google Cloud 控制台中均已启动并正在运行。
  • 检查 VPN 日志是否存在错误或丢弃的数据包。
  • 验证 AWS 和Google Cloud 中的路由表是否已正确配置。
  • 确保在 AWS 安全群组和 Google Cloud 防火墙规则中都打开了必要的端口。

如需详细了解如何配置 VPN 连接,请参阅创建 AWS-Google Cloud VPN 和网络连接。

Cloud SQL 实例访问权限

如果您在设置网络配置时遇到问题,请执行以下操作:

  • 确保已建立 VPC 对等互连,并且已正确配置路由。
  • 验证防火墙规则是否允许在所需端口上传输流量。
  • 检查 Cloud SQL 代理日志是否存在错误,并确保其运行正常。
  • 确保网络连接已正确配置并已连接。

如需详细了解如何配置专用数据库访问通道,请参阅连接到 Cloud SQL 实例。

排查加载 CSV 文件方面的问题

将 CSV 数据从 Cloud Storage 加载到 BigQuery 时,作业可能会因格式错误、文件大小限制或架构自动检测问题而失败。请参阅以下部分,以解决常见的 CSV 加载错误。

排查解析错误

如果解析 CSV 文件时出现问题,则加载作业的 errors 资源会被填充错误详细信息。

通常,这些错误会在有问题的行的开头偏移一个字节,以标识有问题的行。对于未压缩的文件,您可以将 gcloud storage 和 --recursive 参数结合使用来访问相关行。

例如,假设您运行 bq load 命令并收到错误消息:

bq load
    --skip_leading_rows=1 \
    --source_format=CSV \
    mydataset.mytable \
    gs://my-bucket/mytable.csv \
    'Number:INTEGER,Name:STRING,TookOffice:STRING,LeftOffice:STRING,Party:STRING'

输出中的错误类似于以下内容:

Waiting on bqjob_r5268069f5f49c9bf_0000018632e903d7_1 ... (0s)
Current status: DONE
BigQuery error in load operation: Error processing job
'myproject:bqjob_r5268069f5f49c9bf_0000018632e903d7_1': Error while reading
data, error message: Error detected while parsing row starting at position: 1405.
Error: Data between close quote character (") and field separator.
File: gs://my-bucket/mytable.csv
Failure details:
- gs://my-bucket/mytable.csv: Error while reading data,
error message: Error detected while parsing row starting at
position: 1405. Error: Data between close quote character (") and
field separator. File: gs://my-bucket/mytable.csv
- Error while reading data, error message: CSV processing encountered
too many errors, giving up. Rows: 22; errors: 1; max bad: 0; error
percent: 0

根据上文的错误内容,可以知道文件中存在格式错误。若要查看文件的内容,可运行 gcloud storage cat 命令:

gcloud storage cat 1405-1505 gs://my-bucket/mytable.csv --recursive

输出类似于以下内容:

16,Abraham Lincoln,"March 4, 1861","April 15, "1865,Republican
18,Ulysses S. Grant,"March 4, 1869",
...

根据文件的输出内容,可以知道问题出在,"April 15, "1865 中引号的位置不正确。

CSV 压缩文件

对于 CSV 压缩文件,解析错误的调试过程更具挑战性,因为报告的字节偏移针对的是未压缩文件中的位置。以下 gcloud storage cat 命令会从 Cloud Storage 流式传输文件,解压缩文件,确定相应的字节偏移,并输出出现格式错误的行:

gcloud storage cat gs://my-bucket/mytable.csv.gz | gunzip - | tail -c +1406 | head -n 1

输出类似于以下内容:

16,Abraham Lincoln,"March 4, 1861","April 15, "1865,Republican

配额错误问题排查

使用本部分中的信息可排查与将 CSV 文件加载到 BigQuery 相关的配额或限制错误。

如果您使用带有 --allow_quoted_newlines 标志的 bq load 命令加载大型 CSV 文件,则可能会遇到此错误。

错误消息

Input CSV files are not splittable and at least one of the files is larger than
the maximum allowed size. Size is: ...

解决方法

要解决此配额错误,请执行以下操作:

  • 将 --allow_quoted_newlines 标志设置为 false。
  • 将 CSV 文件拆分为多个小于 4 GB 的较小区块。

如需详细了解在将数据加载到 BigQuery 时适用的限制,请参阅加载作业。

排查架构自动检测问题

在自动检测 CSV 文件的架构时,您可能会遇到以下错误:

错误:Error while reading data, error message: CSV processing encountered too many errors, giving up.

如果您的 CSV 文件包含带有字符串值的标题行,但 BigQuery 未将其检测为标题,则可能会发生此错误。您可以使用 --skip_leading_rows 选项跳过标题行。