【问题标题】:Where is input temporarily stored during "bq load .. localfile.csv"?在“bq load .. localfile.csv”期间,输入临时存储在哪里?
【发布时间】:2018-03-20 23:25:22
【问题描述】:

gcloud-sdk 命令“bq load”可以将本地文件作为输入。

从命令的输出来看,该文件似乎是在安排 bigquery 加载作业之前首先上传到谷歌云存储某处。鉴于 bigquery schedule-load-job 端点的 REST api 也只需要“gs://”url,并且加载作业需要数据是 可访问的,我很确定这样正在上传到云存储(尽管我找不到任何明确描述本地文件“bq load”的文档。

那么我的问题是:谁能告诉我本地文件临时上传到哪里?它是 gcloud 项目云存储桶之一,还是其他地方?是否保证在加载作业完成后被删除?

我要求数据仅保存在特定地理区域,因此(假定的)临时存储的位置很重要。

我可以将数据显式上传到存储,然后参考云存储使用“bq load”,但之后需要安排删除数据,这有点不便。具有“生命周期规则”的专用存储至少可以在 1 天后删除,但“bq load ..localfile”方法更清洁..

【问题讨论】:

    标签: google-cloud-platform google-bigquery google-cloud-storage


    【解决方案1】:

    如果您运行bq --help,您可以看到global bq_flags 之一是--location。定义如下:

    --location:“创建数据集或确定作业应在何处运行时使用的默认地理位置(不运行时忽略 适用。)”

    如果你运行:

    bq load --location=eu {your-table} {your-source} 
    

    对于位于欧盟的数据集,作业应该成功并且所有相关的作业都应该在欧盟运行。

    【讨论】:

    • 感谢您的回答。可悲的是, --location 标志的记录不够清楚,无法满足我的用例。我的客户在项目要求中明确表示,任何时候都不应将数据存储在欧盟以外。使用此标志,可以指定“--location=eu”(注意:这是 Google 在其他地方所指的“多区域位置”或“多区域名称”)。但是,bq 工具仍然只是打印出“已上传”,而没有确认数据加载到的位置。位置标志可能指定加载作业运行的位置,而不是数据存储的位置。
    • gcloud 命令都支持“--verbosity=”标志;如果 bq 有这个,那么它可能会打印出数据上传到的位置。但是 bq 命令显然没有这个标志。鉴于本地文件的“bq load”行为模糊,以及使用 eu 存储的法律要求,我只需要使用“gsutil cp”,然后从云存储中使用“bq load”。不过谢谢你的回答。
    • @SimonKitching Kitching,实际上,当您创建数据集时,您选择了它的位置 (cloud.google.com/bigquery/docs/datasets)。如果您选择欧盟:“您的核心 BigQuery 客户数据位于欧盟。 ” 核心 Bigquery 数据在此处定义:cloud.google.com/terms/service-terms#13-google-bigquery-service。13.2 瞬态存储文章指出“......数据可以暂时存储或缓存在任何国家”,但如果您的数据集位置是欧盟,则意味着它将位于任何欧盟国家。
    • @SimonKitching ,继续我的回答,如果您设置 --location=eu,所有作业都将在欧盟运行,并且如果您的数据集将欧盟设置为数据位置,则数据将存储在那里。要确定这一点,请尝试以下操作:使用数据位置设置为 EU 的数据集,尝试运行:bq load --location=us {} {}。它会失败;您只能在欧盟为此数据集运行作业(因此,如果您的数据集位于欧盟,实际上看起来甚至不需要设置此标志)
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多