Google Big Query - 从 GCS 加载文件失败并显示“未找到”,但文件存在

问题描述 投票:0回答:3

我们有一个经常发生的奇怪问题。

我们有一个从源获取文件并将其加载到 GCS 的流程。只有当文件上传成功时,我们才会尝试将其加载到 BigQuery 表中并得到以下错误 “未找到:Uris uri 列表(可能被截断):json: file_name: ...”。

经过深入调查,一切都应该没问题,但我们不知道发生了什么变化。在该时间范围内,作业中的文件存在于云存储中,并在 BigQuery 尝试获取该文件之前 2 分钟上传到 GCS。

需要说明的是,我们将每个文件作为整个批量字典加载到云存储中,如

gs://<bucket>/path_to_dir/*
。还支持吗? 此外,文件大小也很小 - 从几个字节到 KB。有关系吗?

用于检查的作业 ID:
load_file_8e4e16f737084ba59ce0ba89075241b7 load_file_6c13c25e1fc54a088af40199eb86200d

google-bigquery google-cloud-storage
3个回答
0
投票

Cloud Storage 一致性的已知问题

Felipe 指出,这确实与 Cloud Storage 的一个已知问题有关。 Google 云存储事件 #16036 自 2016 年 12 月 20 日起已得到解决。问题 738 也对此进行了跟踪。尽管 Cloud Storage 列表操作最终一致,但此事件在返回一致结果的操作中显示出过多的延迟。

处理云存储不一致

虽然这是一个孤立的事件,但采取一些方法来处理这种不一致仍然是一个好习惯。两条这样的建议可以在相关公共问题的comment #10中找到。

  1. 如果失败,请重试加载作业。
  2. 验证 Cloud Storage 结果是否与预期一致

    验证 BigQuery 处理的预期文件数量(和总大小)。您可以从作业元数据中获取此信息。

仍然得到意想不到的结果

如果您再次遇到此类问题并采取了适当的错误处理措施,我建议您首先咨询 Google Cloud Status DashboardBigQuery 公共问题跟踪器,以获取显示类似症状的现有报告。如果不存在,请在问题跟踪器上提交新问题。


0
投票

解决方案是从多区域存储桶(在启用区域类型之前设置)移至区域。 自从我们搬家以来,我们从未遇到过这个问题。


0
投票

对于我的情况,我最终通过删除文件名行之前的一些额外空格来解决它,如下所示:

 bq load --source_format=CSV --field_delimiter="|" \
        project:DATASET.table \# extra spaces here
        gs://bucket/filename.csv \
        col:STRING,col2:STRING,col3:INTEGER
© www.soinside.com 2019 - 2024. All rights reserved.