@@ -125,11 +125,19 @@ def __repr__(self):
125125try :
126126 from google .cloud import bigquery as gcp_bigquery
127127 TableReference = gcp_bigquery .TableReference
128+ DatasetReference = gcp_bigquery .DatasetReference
129+ SchemaField = gcp_bigquery .SchemaField
128130except ImportError :
129131
130132 class TableReference (object ):
131133 pass
132134
135+ class DatasetReference (object ):
136+ pass
137+
138+ class SchemaField (object ):
139+ pass
140+
133141
134142# pylint: enable=wrong-import-order, wrong-import-position, ungrouped-imports
135143
@@ -216,8 +224,7 @@ def get_hashable_destination(destination):
216224
217225
218226def to_hashable_table_ref (
219- table_ref_elem_kv : tuple [Union [str , gcp_bigquery .TableReference ], V ]
220- ) -> tuple [str , V ]:
227+ table_ref_elem_kv : tuple [Union [str , TableReference ], V ]) -> tuple [str , V ]:
221228 """Turns the key of the input tuple to its string representation. The key
222229 should be either a string or a TableReference.
223230
@@ -243,7 +250,7 @@ def _parse_schema_field(field):
243250 mode = field .get ('mode' , 'NULLABLE' )
244251 description = field .get ('description' )
245252 fields = tuple ([_parse_schema_field (x ) for x in field .get ('fields' , [])])
246- return gcp_bigquery . SchemaField (
253+ return SchemaField (
247254 field ['name' ],
248255 field ['type' ],
249256 mode = mode ,
@@ -281,10 +288,9 @@ def parse_table_reference(table, dataset=None, project=None):
281288 format.
282289 """
283290
284- if isinstance (table , gcp_bigquery .TableReference ):
285- return gcp_bigquery .TableReference (
286- gcp_bigquery .DatasetReference (table .project , table .dataset_id ),
287- table .table_id )
291+ if isinstance (table , TableReference ):
292+ return TableReference (
293+ DatasetReference (table .project , table .dataset_id ), table .table_id )
288294 elif callable (table ):
289295 return table
290296 elif isinstance (table , value_provider .ValueProvider ):
@@ -307,8 +313,7 @@ def parse_table_reference(table, dataset=None, project=None):
307313 # A dummy project is used. It's often overridden by the pipeline options
308314 project = FALLBACK_PROJECT
309315
310- return gcp_bigquery .TableReference (
311- gcp_bigquery .DatasetReference (project , dataset ), table )
316+ return TableReference (DatasetReference (project , dataset ), table )
312317
313318
314319# -----------------------------------------------------------------------------
@@ -784,8 +789,8 @@ def _create_table(
784789
785790 additional_parameters = additional_parameters or {}
786791 table = gcp_bigquery .Table (
787- table_ref = gcp_bigquery . TableReference (
788- gcp_bigquery . DatasetReference (project_id , dataset_id ), table_id ),
792+ table_ref = TableReference (
793+ DatasetReference (project_id , dataset_id ), table_id ),
789794 schema = schema ,
790795 ** additional_parameters )
791796 response = self .client .create_table (table )
@@ -1327,7 +1332,7 @@ def convert_row_to_dict(self, row, schema):
13271332 if isinstance (schema , (tuple , list )):
13281333 cell = row .f [index ]
13291334 value = from_json_value (cell .v ) if cell .v is not None else None
1330- elif isinstance (schema , gcp_bigquery . SchemaField ):
1335+ elif isinstance (schema , SchemaField ):
13311336 cell = row ['f' ][index ]
13321337 value = cell ['v' ] if 'v' in cell else None
13331338 if field .mode == 'REPEATED' :
@@ -1577,11 +1582,11 @@ def beam_row_from_dict(row: dict, schema):
15771582 Returns:
15781583 ~apache_beam.pvalue.Row: The converted row.
15791584 """
1580- if not isinstance (schema , (tuple , list , gcp_bigquery . SchemaField )):
1585+ if not isinstance (schema , (tuple , list , SchemaField )):
15811586 schema = get_bq_tableschema (schema )
15821587 beam_row = {}
15831588 fields_to_iterate = schema .fields if isinstance (
1584- schema , gcp_bigquery . SchemaField ) else schema
1589+ schema , SchemaField ) else schema
15851590 for field in fields_to_iterate :
15861591 name = field .name
15871592 mode = field .mode .upper ()
@@ -1632,7 +1637,7 @@ def get_table_schema_from_string(schema):
16321637 schema_list = [s .strip () for s in schema .split (',' )]
16331638 for field_and_type in schema_list :
16341639 field_name , field_type = field_and_type .split (':' )
1635- field_schema = gcp_bigquery . SchemaField (
1640+ field_schema = SchemaField (
16361641 name = field_name , field_type = field_type , mode = 'NULLABLE' )
16371642 table_schema .append (field_schema )
16381643 return table_schema
@@ -1748,11 +1753,11 @@ def get_beam_typehints_from_tableschema(schema, type_overrides=None):
17481753 Nested and repeated fields are supported.
17491754 """
17501755 effective_types = {** BIGQUERY_TYPE_TO_PYTHON_TYPE , ** (type_overrides or {})}
1751- if not isinstance (schema , (tuple , list , gcp_bigquery . SchemaField )):
1756+ if not isinstance (schema , (tuple , list , SchemaField )):
17521757 schema = get_bq_tableschema (schema )
17531758 typehints = []
17541759 fields_to_iterate = schema .fields if isinstance (
1755- schema , gcp_bigquery . SchemaField ) else schema
1760+ schema , SchemaField ) else schema
17561761 for field in fields_to_iterate :
17571762 name , field_type , mode = field .name , field .field_type .upper (), field .mode .upper ()
17581763
@@ -1823,11 +1828,10 @@ def check_schema_equal(
18231828 Returns:
18241829 bool: True if the schemas are equivalent, False otherwise.
18251830 """
1826- if type (left ) != type (right ) or not isinstance (
1827- left , (tuple , gcp_bigquery .SchemaField )):
1831+ if type (left ) != type (right ) or not isinstance (left , (tuple , SchemaField )):
18281832 return False
18291833
1830- if isinstance (left , gcp_bigquery . SchemaField ):
1834+ if isinstance (left , SchemaField ):
18311835 if left .name != right .name :
18321836 return False
18331837
0 commit comments