【问题标题】:how to set table expiry time big query如何设置表到期时间bigquery
【发布时间】:2016-10-02 01:14:13
【问题描述】:

在为 GBQ 中的新表设置到期时间方面需要帮助。

我正在使用以下代码在 gbq 中创建/上传一个新文件作为表格,

 def uploadCsvToGbq(self, table_name, jsonSchema, csvFile, delim):
    job_data = {
        'jobReference': {
            'projectId': self.project_id,
            'job_id': str(uuid.uuid4())
        },
        #"expires":str(datetime.now()+timedelta(seconds=60)),
        #"expirationTime": 20000,
        #"defaultTableExpirationMs":20000,
        'configuration': {
            'load': {'writeDisposition': 'WRITE_TRUNCATE',
                     'fieldDelimiter': delim,
                     'skipLeadingRows': 1,
                     'sourceFormat': 'CSV',
                     'schema': {
                         'fields': jsonSchema
                     },
                     'destinationTable': {
                         'projectId': self.project_id,
                         'datasetId': self.dataset_id,
                         'tableId': table_name
                     }
                     }
        }
    }

    upload = MediaFileUpload(csvFile,
                             mimetype='application/octet-stream', chunksize=1048576,
                             # This enables resumable uploads.
                             resumable=True)
    start = time.time()
    job_id = 'job_%d' % start
    # Create the job.
    return self.bigquery.jobs().insert(projectId=self.project_id,
                                       body=job_data,
                                       media_body=upload).execute()

这是一个完美的代码,可以将该文件作为新表上传到 GBQ,现在我需要设置表的过期时间,我已经尝试设置(已注释)过期、过期时间和 defaultTableExpirationMs,但没有任何效果。

有人知道吗?

【问题讨论】:

    标签: python-2.7 api google-bigquery


    【解决方案1】:

    您应该使用Tables: patch API 并设置expirationTime 属性

    【讨论】:

      【解决方案2】:

      下面的函数创建一个带有过期时间的表,因此作为替代解决方案,您可以先创建表,然后再插入数据。

      def createTableWithExpire(bigquery, dataset_id, table_id, expiration_time):
          """
              Creates a BQ table that will be expired in specified time.
      
              Expiration time can be in Unix timestamp format e.g. 1452627594
          """    
              table_data = {
                  "expirationTime": expiration_time,
                  "tableReference":
                      {
                          "tableId": table_id
                      }
              }
              return bigquery.tables().insert(
                  projectId=_PROJECT_ID,
                  datasetId=dataset_id,
                  body=table_data).execute()
      

      米哈伊尔也在this SO 问题中回答。

      【讨论】:

        【解决方案3】:

        谢谢你们,我结合了这两种解决方案,但做了一些修改以适合我的工作。 当我通过上传 csv 创建表时,我通过调用 patch 方法并将 tableid 传递给它来设置过期时间,

        def createTableWithExpire(bigquery, dataset_id, table_id, expiration_time):
        """
            Creates a BQ table that will be expired in specified time.
        
            Expiration time can be in Unix timestamp format e.g. 1452627594
        """    
            table_data = {
                "expirationTime": expiration_time,
            }
            return bigquery.tables().patch(
                projectId=_PROJECT_ID,
                datasetId=dataset_id,
                tableId=table_id,
                body=table_data).execute()
        

        【讨论】:

        • 您能够阅读我们的答案真是太好了!同时,即使您还没有足够的声望来投票 - 您至少可以接受以下答案之一 - 您可以使用已发布答案左侧、投票下方的勾号 mark accepted answer。请参阅 meta.stackexchange.com/questions/5234/… 了解为什么它很重要!
        【解决方案4】:

        另一种选择是在创建表后设置过期时间:

        from google.cloud import bigquery
        import datetime 
        client    = bigquery.Client()
        table_ref = client.dataset('my-dataset').table('my-table') # get table ref
        table     = client.get_table(table_ref) # get Table object
        
        # set datetime of expiration, must be a datetime type
        table.expires = datetime.datetime.combine(datetime.date.today() +  
                                                  datetime.timedelta(days=2),
                                                  datetime.time() )
        table = client.update_table(table, ['expires']) # update table
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-15
          • 2020-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多