|
|
|
@ -22,6 +22,8 @@ from apiclient import discovery |
|
|
|
|
from apiclient.errors import HttpError |
|
|
|
|
from oauth2client.client import GoogleCredentials |
|
|
|
|
|
|
|
|
|
# 30 days in milliseconds |
|
|
|
|
_EXPIRATION_MS = 30 * 24 * 60 * 60 * 1000 |
|
|
|
|
NUM_RETRIES = 3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -64,8 +66,21 @@ def create_table(big_query, project_id, dataset_id, table_id, table_schema, |
|
|
|
|
fields, description) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_partitioned_table(big_query, project_id, dataset_id, table_id, table_schema, |
|
|
|
|
description, partition_type='DAY', expiration_ms=_EXPIRATION_MS): |
|
|
|
|
"""Creates a partitioned table. By default, a date-paritioned table is created with |
|
|
|
|
each partition lasting 30 days after it was last modified. |
|
|
|
|
""" |
|
|
|
|
fields = [{'name': field_name, |
|
|
|
|
'type': field_type, |
|
|
|
|
'description': field_description |
|
|
|
|
} for (field_name, field_type, field_description) in table_schema] |
|
|
|
|
return create_table2(big_query, project_id, dataset_id, table_id, |
|
|
|
|
fields, description, partition_type, expiration_ms) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_table2(big_query, project_id, dataset_id, table_id, fields_schema, |
|
|
|
|
description): |
|
|
|
|
description, partition_type=None, expiration_ms=None): |
|
|
|
|
is_success = True |
|
|
|
|
|
|
|
|
|
body = { |
|
|
|
@ -80,6 +95,12 @@ def create_table2(big_query, project_id, dataset_id, table_id, fields_schema, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if partition_type and expiration_ms: |
|
|
|
|
body["timePartitioning"] = { |
|
|
|
|
"type": partition_type, |
|
|
|
|
"expirationMs": expiration_ms |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
table_req = big_query.tables().insert(projectId=project_id, |
|
|
|
|
datasetId=dataset_id, |
|
|
|
|