使用 Google Composer 运行 Bigquery 查询

Posted

技术标签:

【中文标题】使用 Google Composer 运行 Bigquery 查询【英文标题】:Using Google Composer to run Bigquery query 【发布时间】:2020-02-26 06:50:10 【问题描述】:

我是 Google 作曲家和 Apache 气流的新手。

我正在尝试通过创建 DAG 来查询 Bigquery。

import datetime

import airflow
from airflow.operators import bash_operator


from airflow.contrib.operators import bigquery_operator


YESTERDAY = datetime.datetime.now() - datetime.timedelta(days=1)

default_args = 
    'owner': 'me',
    'depends_on_past': False,
    'email': [''],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': datetime.timedelta(minutes=5),
    'start_date': YESTERDAY,


with airflow.DAG(
        'composer_test_dag',
        'catchup=False',
        default_args=default_args,
        schedule_interval=datetime.timedelta(days=1)) as dag:

    bq_recent_questions_query = bigquery_operator.BigQueryOperator(
        task_id='bq_weather_query',
        bql="""
        SELECT owner_display_name, title, view_count
        FROM `bigquery-public-data.***.posts_questions`
        ORDER BY view_count DESC
        LIMIT 100
        """,
        use_legacy_sql=False)     

这是正确的方法吗? 如何从中获取查询结果?

【问题讨论】:

你绝对需要使用 Airflow/Composer 吗?这很难、复杂且昂贵。另一种选择是使用 Cloud Scheduler + Cloud Build。更容易......而且更便宜。 【参考方案1】:

BigQueryOperator 通常用于在 BigQuery 中执行查询,然后将结果加载到另一个 BigQuery 表(转换操作)。我假设您正在尝试从 BigQuery 公共表中选择 3 列并加载到另一个表。所以在 BigQueryOperator 中提供destination_dataset_table

请注意以下几点:

    ***.posts_questions 表非常大,即使使用 LIMIT 仍然会扫描整个表。所以要注意成本。 使用sql 参数代替bql,因为它不再使用。

【讨论】:

谢谢! BigQueryOperator 中的destination_dataset_table >> 通过提供此字段,可以使用查询结果创建一个新视图/表? 是的,它创建了一个表。此处还提供了使用 BigQueryOperator 创建 view 而不是表的实现:github.com/apache/airflow/blob/… 因此,如果您需要视图而不是表,您可以参考该代码并将实现复制到您的代码库中。 何时创建新表的行为可以通过create_disposition参数进行配置。默认情况下,此参数设置为CREATE_IF_NEEDED,它将按照您的描述进行。另请查看相关参数write_disposition。默认设置为WRITE_EMPTY,只有在表为空或刚刚创建时才会写入。

以上是关于使用 Google Composer 运行 Bigquery 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用计划查询刷新 Google Big Query 中的现有表?

DAG 在 Google Cloud Composer 网络服务器上不可点击,但在本地 Airflow 上运行良好

如何从 Google App Script 中的文件运行保存的 Big Query 脚本? [关闭]

在 Google Big Query 中使用 bq 命令行执行查询

使用 Cloud Proxy 的 Google Cloud Composer 和 MS SQL

Google Cloud Composer (Apache Airflow) 无法访问日志文件