我有一个用于单元测试的表,在其中运行一些代码,查询该表以检查数据是否已成功添加,然后删除该表的全部内容。
我将如何删除表中的每一行?
我宁愿不必重新创建表。
效率不是一个因素,因为我每个单元测试只处理少于10行。
答案 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.