Recently GCP BQ supports for the dynamicSQL. I want to try this with Cloud Functions.
My BQ Dynamic SQL (which worked on UI)
declare cols string;
set cols=(select STRING_AGG (column_name,',') from `my_db.INFORMATION_SCHEMA.COLUMNS` where table_name='tbla');
EXECUTE IMMEDIATE format("""select %s from `my_db.tbla`""",cols);
I want to pass the table_name value from my python code, but the thing is, will it support by Python BQ lib?
any example python code?
I tried these codes, but no luck
Code 1:
def hello_gcs(event, context):
table_name='tbla'
client = bigquery.Client()
job_config = bigquery.QueryJobConfig(use_legacy_sql=False)
sql=( '''
declare cols string;
set cols=(select STRING_AGG (column_name,',') from `my_db.INFORMATION_SCHEMA.COLUMNS` where table_name=?);
EXECUTE IMMEDIATE format("""select @ col from `my_db.tbla`""") using cols
''',(table_name))
query_job = client.query(sql, job_config=job_config)
results = query_job.result()
for row in results:
print("{} : {} views".format(row.url, row.view_count))
Error:
, line 130, in result raise self._exception google.api_core.exceptions.BadRequest: 400 Query error: Positional parameters are not supported at [3:104]
from google.cloud import bigquery
def hello_gcs(event, context):
table_name='tbla'
client = bigquery.Client()
job_config = bigquery.QueryJobConfig(use_legacy_sql=False)
sql=( '''
declare cols string;
set cols=(select STRING_AGG (column_name,',') from `my_db.INFORMATION_SCHEMA.COLUMNS` where table_name=%s);
EXECUTE IMMEDIATE format("""select @ col from `my_db.tbla`""") using cols
''',(table_name))
query_job = client.query(sql, job_config=job_config)
results = query_job.result()
for row in results:
print("{} : {} views".format(row.url, row.view_count))
Error:
line 130, in result raise self._exception google.api_core.exceptions.BadRequest: 400 Syntax error: Illegal input character "%" at [3:104]