【问题标题】:Recursively go through folders and load the csv files in each folder into BigQuery递归遍历文件夹并将每个文件夹中的 csv 文件加载到 BigQuery
【发布时间】:2021-07-09 02:23:43
【问题描述】:

所以我有遵循这种目录样式的 Google Cloud Storage Bucket:

gs://mybucket/{year}/{month}/{day}/{a csv file here}

所有 csv 文件都遵循相同的架构,因此不应该成为问题。我想知道是否有更简单的方法可以将 1 个命令中的所有文件甚至云函数加载到 BigQuery 中的 1 个表中。我现在一直在使用 bl load 来完成此操作,但鉴于我必须每周都执行此操作,因此我希望对其进行一些自动化操作。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    灵感来自this answer

    您可以使用以下命令递归加载文件:

    gsutil ls gs://mybucket/**.csv | \
        xargs -I{} echo {} | \
        awk -F'[/.]' '{print "yourdataset."$7"_"$4"_"$5"_"$6" "$0}' | \
        xargs -I{} sh -c 'bq --location=YOUR_LOCATION load --replace=false --autodetect --source_format=CSV {}'
    

    这会将您的 CSV 文件加载到目标数据集中的独立表中,命名约定为“filename_year_month_day”。 “递归”部分由双通配符 (**) 确保。

    这是手动部分..

    对于自动化部分,您可以选择不同的选项:

    • 最简单的方法可能是将您触发的 Cloud Function 与 Cloud Scheduler 相关联。没有可用的 bash 运行时,因此例如您必须使用 Python。 Here 是 Google 快速搜索给我的结果。

    • 如果您有基础架构,则可以使用编排器(Cloud Composer)来做到这一点(如果没有,请不要考虑)

    • 另一种解决方案是使用 Cloud Run,由 Cloud Scheduler 触发(然后在常规情况下),或者在您的 csv 文件上传到 GCS 时通过 Eventarc 触发器触发。

    【讨论】:

    • 对于云函数,我是否可以循环遍历 python 中的文件夹。我对云功能很陌生,所以我肯定需要一些关于设置触发器等的指导。现在,我目前正在计算引擎上运行一个 cron 任务来迁移数据,所以我在想,从中获得的成功应该可以用作触发器吧?
    • 这是一个与帖子不同的问题。您也许应该为此提出一个新问题。如果给定的答案符合您的需求,您可以接受答案,然后提出下一个问题(提供有关您的 cron 工作的更多详细信息)。
    • 简单地说,触发一个云函数就是向函数端点发送一个HTTP请求
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2018-12-08
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多