【问题标题】:Verify BigQuery table existence验证 BigQuery 表是否存在
【发布时间】:2018-05-06 12:54:29
【问题描述】:

我有一个简单的函数来判断一个表是否存在:

def check_users_usersmetadata_existence():
    """
    Checks if the table Prod_UserUserMetadata exists
    """
    app_id = get_app_id()
    bigquery_client = bigquery.Client(project=app_id)
    dataset_ref = bigquery_client.dataset('Backup')
    table_ref = dataset_ref.table('Prod_UserUserMetadata')
    try:
        table = bigquery_client.get_table(table_ref)
        if table:
            print('Table {}\'s existence sucessfully proved!'.format(table_ref))
            return True
    except HttpError as error:
        raise
        print('Whoops! Table {} doesn\'t exist here! Ref: {}'.format(table_ref, error.resp.status))
        return False

问题是,它会在table = bigquery_client.get_table(table_ref) 这一行抛出 404,这没关系,因为该表不应该存在。但它不会继续处理脚本的其余部分。我试图在 try except 包装器中解析它,但它不起作用。我将如何解析这个?

【问题讨论】:

    标签: python google-bigquery


    【解决方案1】:

    您的脚本没有进入异常子句,因为它引发了 NotFound 错误而不是 HttpError

    这应该可行:

    from google.cloud.exceptions import NotFound
    def check_users_usersmetadata_existence():
        # (...)
        try:
            table = bigquery_client.get_table(table_ref)
            if table:
                print('Table {}\'s existence sucessfully proved!'.format(table_ref))
                return True
        except NotFound as error:
            # ...do some processing ...
            print('Whoops! Table {} doesn\'t exist here! Ref: {}'.format(table_ref, error.resp.status))
            return False
    

    【讨论】:

    • 仍然抛出11:49:47.607 NotFound: 404 GET https://www.googleapis.com/bigquery/v2/projects/liu-laureateid-api-qa/datasets/Backup/tables/Prod_UserUserMetadata: Not found: Table liu-laureateid-api-qa:Backup.Prod_UserUserMetadata
    • 嗯,这很奇怪。只需在这里运行相同的代码就可以了。您是否确认您的脚本进入了例外条款?它是在打印“哎呀”消息吗?
    • 还要注意我删除了raise,如果你把它留在那里,它将从函数中中断并引发错误消息。
    【解决方案2】:

    参见BigQuery Python客户端官方文档中的示例:https://googleapis.dev/python/bigquery/latest/usage/tables.html#getting-a-table

    摘录:

    from google.cloud import bigquery
    from google.cloud.exceptions import NotFound
    
    client = bigquery.Client()
    # table_id = "your-project.your_dataset.your_table"
    
    try:
        client.get_table(table_id)  # Make an API request.
        print("Table {} already exists.".format(table_id))
    except NotFound:
        print("Table {} is not found.".format(table_id))
    

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 2017-08-09
      • 2012-12-13
      • 1970-01-01
      • 2015-04-28
      • 2014-12-11
      • 2015-11-29
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      相关资源
      最近更新 更多