@@ -276,7 +276,7 @@ def _insert_job(self, body_object):
276
276
body = body_object
277
277
).execute ()
278
278
279
- def query (self , query , max_results = None , timeout = 0 , dry_run = False , use_legacy_sql = None ):
279
+ def query (self , query , max_results = None , timeout = 0 , dry_run = False , use_legacy_sql = None , external_udf_uris = None ):
280
280
"""Submit a query to BigQuery.
281
281
282
282
Parameters
@@ -294,6 +294,9 @@ def query(self, query, max_results=None, timeout=0, dry_run=False, use_legacy_sq
294
294
message it would if it wasn't a dry run.
295
295
use_legacy_sql : bool, optional. Default True.
296
296
If False, the query will use BigQuery's standard SQL (https://cloud.google.com/bigquery/sql-reference/)
297
+ external_udf_uris : list, optional
298
+ Contains external UDF URIs. If given, URIs must be Google Cloud
299
+ Storage and have .js extensions.
297
300
298
301
299
302
Returns
@@ -321,6 +324,10 @@ def query(self, query, max_results=None, timeout=0, dry_run=False, use_legacy_sq
321
324
if use_legacy_sql is not None :
322
325
query_data ['useLegacySql' ] = use_legacy_sql
323
326
327
+ if external_udf_uris :
328
+ query_data ['userDefinedFunctionResources' ] = \
329
+ [ {'resourceUri' : u } for u in external_udf_uris ]
330
+
324
331
return self ._submit_query_job (query_data )
325
332
326
333
def get_query_schema (self , job_id ):
@@ -1048,7 +1055,7 @@ def write_to_table(
1048
1055
query ,
1049
1056
dataset = None ,
1050
1057
table = None ,
1051
- external_udf_uris = [] ,
1058
+ external_udf_uris = None ,
1052
1059
allow_large_results = None ,
1053
1060
use_query_cache = None ,
1054
1061
priority = None ,
@@ -1073,7 +1080,7 @@ def write_to_table(
1073
1080
table : str, optional
1074
1081
String id of the table
1075
1082
external_udf_uris : list, optional
1076
- Contains extternal UDF URIs. If given, URIs must be Google Cloud
1083
+ Contains external UDF URIs. If given, URIs must be Google Cloud
1077
1084
Storage and have .js extensions.
1078
1085
allow_large_results : bool, optional
1079
1086
Whether or not to allow large results
@@ -1144,13 +1151,9 @@ def write_to_table(
1144
1151
if write_disposition :
1145
1152
configuration ['writeDisposition' ] = write_disposition
1146
1153
1147
- configuration ['userDefinedFunctionResources' ] = []
1148
- for external_udf_uri in external_udf_uris :
1149
- configuration ['userDefinedFunctionResources' ].append (
1150
- {
1151
- "resourceUri" : external_udf_uri
1152
- }
1153
- )
1154
+ if external_udf_uris :
1155
+ configuration ['userDefinedFunctionResources' ] = \
1156
+ [ {'resourceUri' : u } for u in external_udf_uris ]
1154
1157
1155
1158
body = {
1156
1159
"configuration" : {
0 commit comments