簡體   English   中英

加載操作中的 GCP Bigquery 錯誤:字節丟失

[英]GCP Bigquery Error in Load Operation: Bytes are Missing

我對 Google Cloud Platform 非常csv.gz ,我正在嘗試從存儲在 GCP 存儲桶中的約 60,000 個csv.gz文件在 bigquery 中創建一個表。

為此,我打開了 Cloud Shell,我正在嘗試以下操作:

$ bq --location=US mk my_data
$ bq --location=US \
     load --null_marker='' \
     --source_format=CSV --autodetect \
     my_data.my_table gs://my_bucket/*.csv.gz

這會引發以下錯誤:

BigQuery error in load operation: Error processing job 'my_job:bqjob_r3eede45779dc9a51_0000017529110a63_1': 
Error while reading data, error message:
FAILED_PRECONDITION: Invalid gzip file: bytes are missing

我不知道如何在加載文件時找到哪個文件可能有問題。 我檢查了一些文件,它們都是有效的.gz文件,解壓后我可以用任何 csv 閱讀器打開這些文件,但我不知道如何檢查所有文件以找到有問題的文件。

提前感謝您對此的任何幫助!

要遍歷您的存儲桶,您可以使用 eval 命令

#!/bin/bash
FILES="gsutil ls gs://YOUR_BUCKET"
RESULTS=$(eval $FILES)
for f in $RESULTS
do
  read="gsutil cat $f | zcat | wc -c"
  if [[ $(eval $read) == "0" ]]
    then
        #<Process it, Print name or Delete from bucket like below>
        delete="gsutil rm $f"
        eval $delete
    fi
done

如果可能,另一種選擇是在本地下載所有文件,然后從那里進行處理:

gsutil -m cp -R gs://YOUR_BUCKET .

可能存在不包含任何數據的 .gz 文件。 您可能想要編寫一個腳本來過濾 .gz 文件是否有效。

此示例 bash 腳本將對 .gz 文件執行目錄循環,如果它們為空,則將其刪除。

for f in dir/*
do
    if [[ $(gunzip -c $f | head -c1 | wc -c) == "0" ]] 
    then
        do_file_creation
    fi
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM