删除大查询表中的所有行

时间:2019-09-08 01:25:17

标签: google-bigquery

我有一个用于单元测试的表,在其中运行一些代码,查询该表以检查数据是否已成功添加,然后删除该表的全部内容。

我将如何删除表中的每一行?

我宁愿不必重新创建表。

效率不是一个因素,因为我每个单元测试只处理少于10行。

3 个答案:

答案 0 :(得分:2)

此替代方法不会收取10MB的费用:

CREATE OR REPLACE TABLE `temp.replaceable`
AS 
SELECT *
FROM `temp.replaceable`
LIMIT 0

答案 1 :(得分:1)

DELETE FROM `projectid.datasetid.tableid` WHERE TRUE

答案 2 :(得分:0)

您可以将 write_disposition 设置为 WRITE_TRUNCATE 以便在插入前擦除表。见documentation。为了使用它,您必须使用作业来插入数据。我找不到通过流式插入来实现此功能的方法。

这是一个python的例子:

job_config = bigquery.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
dataset_ref = bigquery.DatasetReference(project, 'my_dataset')
table_ref = dataset_ref.table(table_id)
with open(filepath, "rb") as source_file:
    job = client.load_table_from_file(
        source_file,
        table_ref,
        job_config=job_config,
    )  # API request
    job.result() # Waits for table load to complete.