SQL上有很多很棒的帖子可以选择唯一的行并写入(截断)表格,以便删除dus.例如
WITH ev AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY loadTime DESC) AS rowNum
FROM `duplicates`
)
SELECT
* EXCEPT(rowNum)
FROM
ev
WHERE rowNum = 1
Run Code Online (Sandbox Code Playgroud)
我试图使用DML和DELETE稍微改变一下(例如,如果你不想使用BQ savedQuery,只需执行SQL).我想做的大致是:
WITH dup_events AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY loadTime DESC) AS rowNum
FROM `duplicates`
)
DELETE FROM
dup_events
WHERE rowNum > 1
Run Code Online (Sandbox Code Playgroud)
但在控制台中出现此错误:
Syntax error: Expected "(" or keyword SELECT but got keyword DELETE at [10:1]
Run Code Online (Sandbox Code Playgroud)
可以使用DELETE实现(standardSQL)吗?
谢谢!
BigQuery支持以下策略:
WRITE_APPEND -指定可以将行追加到现有表中。
WRITE_EMPTY -指定输出表必须为空。
WRITE_TRUNCATE -指定写应替换表。
它们都不适合UPSERT操作目的。
我正在将订单Json文件导入Google Storage,并希望将其加载到BigQuery中。逻辑提示,某些记录将是新记录,而其他记录已从以前的装载中获取并且需要更新(例如,更新订单状态(新/处于保留状态/已发送/退款等...)
我正在使用Airflow,但我的问题很普遍:
update_bigquery = GoogleCloudStorageToBigQueryOperator(
dag=dag,
task_id='load_orders_to_BigQuery',
bucket=GCS_BUCKET_ID,
destination_project_dataset_table=table_name_template,
source_format='NEWLINE_DELIMITED_JSON',
source_objects=[gcs_export_uri_template],
schema_fields=dc(),
create_disposition='CREATE_IF_NEEDED',
write_disposition='WRITE_TRUNCATE',
skip_leading_rows = 1,
google_cloud_storage_conn_id=CONNECTION_ID,
bigquery_conn_id=CONNECTION_ID
)
Run Code Online (Sandbox Code Playgroud)
此代码使用表示WRITE_TRUNCATE这意味着删除整个表并加载请求的文件。
我如何修改它以提供支持UPSERT?
我唯一的选择是查询表搜索以找到json中出现的现有订单LOAD吗?删除它们,然后执行?
目前,我们正在将从供应商API检索到的数据上传到Google Datastore.想知道数据存储和查询数据的最佳方法是什么.
我将需要查询数百万行数据,并将从数据中提取自定义工程特征.所以不知道是否我应该直接将数据加载到的BigQuery和数据存储区查询它已获得更快的处理或储存,然后将它移动到BigQuery的查询?我将使用pandas对存储的数据执行统计.
python pandas google-bigquery google-cloud-datastore google-cloud-platform