【问题标题】:BigQuery table labels disappear after updating dataBigQuery 表格标签在更新数据后消失
【发布时间】:2020-07-01 10:08:27
【问题描述】:

我已经使用网络用户界面为 BigQuery 表设置了标签。但是,当我使用 Python 或 Nodejs 客户端库(请参阅下面的代码示例)将新数据附加到表中时,标签会消失。这是预期的行为吗?如果是这样,有没有办法在不丢失标签的情况下更新表数据? 节点:

const metadata = {
      sourceFormat: "NEWLINE_DELIMITED_JSON",
      autodetect: true,
      writeDisposition: "WRITE_APPEND",
};
const [job] = await bigquery
      .dataset(datasetId)
      .table(tableId)
      .load(filename, metadata);

Python:

data.to_gbq(
            'datasetname.tablename', 
            project_id='projectid', 
            if_exists='replace'
        )

【问题讨论】:

  • 你能分享你尝试过的 Python 代码或者你的代码更大的 sn-p 吗?
  • 我尝试使用 Python 重现您的问题,但它对我来说工作正常
  • hhmmm 这就是我所希望的行为,这是个好消息,谢谢!我添加了正在使用的 Python 代码。我猜 if_exists='replace' 实际上会破坏表,而不仅仅是替换数据。我的 Nodejs 示例是专门附加数据的,所以我确信这种行为是错误的。我已经为 Nodejs 客户端填写了一个问题。
  • 是的,这个替换属性类似于“删除表并创建另一个表”。现在它是有道理的。关于节点代码,它应该可以工作
  • 我正在等待对我在 nodejs 库中提出的问题的回复。我认为接受的答案应该指定是否可以使用 nodejs 库保留标签,或者它是否是类似的错误。不过,您的回答非常有帮助,我给了您赞成票。

标签: google-bigquery


【解决方案1】:

我尝试使用下面的代码重现您的问题,正如您在图像中看到的那样,标签没有受到影响。

from google.cloud import bigquery

client = bigquery.Client("my-project-id")

filename = "/path/to/file"
dataset_ref = client.dataset("dataset_id")
table_ref = dataset_ref.table("table_id")

job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON

with open(filename, "rb") as source_file:
     job = client.load_table_from_file(source_file, table_ref, job_config=job_config)



  1. 通过界面创建的带有标签的表
  2. 运行代码
  3. 标签未修改



编辑

在使用 Pandas 写入 BigQuery 时,如果将属性“if_exists”设置为“replace”,则会删除该表并创建另一个表,如 here 所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多