将BigQuery表数据导出到使用python的where子句的Google Cloud Storage

时间:2018-06-11 09:18:31

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

我想将表格数据从BigQuery导出到Google云端存储。 问题是,我需要从date1到date2的数据而不是整个表数据。

KeyboardVisibilityEvent.setEventListener(
        getActivity(),
        new KeyboardVisibilityEventListener() {
            @Override
            public void onVisibilityChanged(boolean isOpen) {
                // some code depending on keyboard visiblity status
            }
        });

这是我在google云帮助中找到的内容。 使用where子句无法添加查询或限制数据。

4 个答案:

答案 0 :(得分:1)

使用您提供的代码(this doc之后),您只能将整个表格导出到GCS,而不是查询结果。

或者,您可以将查询结果download and save发送到本地文件并将其上传到GCS。或者更简单,将查询结果保存到新的BigQuery表中,并使用您使用的代码将新表完全导出到GCS。

答案 1 :(得分:1)

不幸的是,这将是两个步骤。 首先,您需要构建结果表并在导出结果之后。 从成本角度来看,影响应该是最小的 - 你将支付临时表使用的存储结果,但成本是每月每GB 0.02美元 - 所以如果你设法在1小时内完成任务 - 成本将是每GB 0.000027美元

job_config = bigquery.QueryJobConfig()
gcs_filename = 'file_*.gzip'

table_ref = client.dataset(dataset_id).table('my_temp_table')
job_config.destination = table_ref

job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE

# Start the query, passing in the extra configuration.
query_job = client.query(
    """#standardSql
    select * from `project.dataset.table` where <your_condition> ;""",
    location='US',
    job_config=job_config)

while not query_job.done():
    time.sleep(1)

#check if table successfully written
print("query completed")
job_config = bigquery.ExtractJobConfig()
job_config.compression = bigquery.Compression.GZIP
job_config.destination_format = (
    bigquery.DestinationFormat.CSV)
job_config.print_header = False

destination_uri = 'gs://{}/{}'.format(bucket_name, gcs_filename)

extract_job = client.extract_table(
    table_ref,
    destination_uri,
    job_config=job_config,
    location='US')  # API request
extract_job.result()
print("extract completed")

答案 2 :(得分:0)

解决方案:使用python将BigQuery数据导出到具有where子句的Google Cloud Storage

from google.cloud import bigquery
from google.cloud import storage

def export_to_gcs():
    QUERY = "SELECT * FROM TABLE where CONDITION" # change the table and where condition
    bq_client = bigquery.Client()
    query_job = bq_client.query(QUERY) # BigQuery API request
    rows_df = query_job.result().to_dataframe()
    
    storage_client = storage.Client() # Storage API request
    bucket = storage_client.get_bucket(BUCKETNAME) # change the bucket name
    blob = bucket.blob('temp/Add_to_Cart.csv')
    blob.upload_from_string(rows_df.to_csv(sep=';',index=False,encoding='utf-8'),content_type='application/octet-stream')
    return "success"

答案 3 :(得分:0)

在原生 BigQuery SQL 中使用“EXPORT DATA OPTIONS”命令从 SQL 查询中导出数据。

使用 python 客户端将 SQL 提交给 BigQuery,BigQuery 将负责其余的工作。

from google.cloud import bigquery
from google.cloud import storage

BQ = bigquery.Client()
CS = storage.Client()

def gcp_export_http(request):

    sql = """
    EXPORT DATA OPTIONS(uri="gs://gcs-bucket/*",format='PARQUET',
    compression='SNAPPY') AS SELECT * FROM 
    table_name where column_name > colunn_value
    """

    query_job = BQ.query(sql)  
    res = query_job.result() 
return res