Как вызвать функцию BigQuery в блокноте Jupyter

Я использую Jupyterhub для запуска BigQuery SQL, и обычный синтаксис для моих запросов:

import google.datalab.bigquery as bq

sql_qry = "select * from table"

query = bq.Query(sql_qry)
sql_job = query.execute(output_options = bq.QueryOutput.table(name='output_table',
                                                              mode='overwrite'))

Но я пытаюсь использовать функцию BigQuery на Jupyterhub:

CREATE TEMP FUNCTION first_letter(x STRING) AS (
SUBSTR(x, 1, 1)
);

Любая идея, как я могу разобрать это? Конечно, я могу просто добавить его как строку к каждому запросу, но из-за синтаксиса я не могу просто последовательно запускать этот запрос с другими запросами в той же строке.


person Mayank    schedule 26.12.2019    source источник
comment
Можете ли вы привести примеры запросов, которые вы пытаетесь выполнить? Я не понимаю эту часть вашей проблемы: из-за синтаксиса я не могу просто последовательно запускать этот запрос с другими запросами в той же строке.   -  person vinoaj    schedule 26.12.2019
comment
Сделайте это постоянной функцией, удалив temp. Затем просто включите его использование в свой sel_qry. select *, project.dataset.fn_first_letter(field) from table. medium.com/@hoffa/new-in-bigquery-persistent- udfs-c9ea4100fd83   -  person rtenha    schedule 26.12.2019
comment
Да именно то, что я искал. Я не знал, что можно создавать постоянные функции и сохранять их в базе данных. Спасибо!   -  person Mayank    schedule 31.12.2019


Ответы (1)


Вы можете сохранить свою функцию в файле sql, затем в JupyterHub прочитать этот файл, сохранить его в переменной и отправить в BigQuery API примерно так:

sql_file = file('function.sql', 'r')
sql = sql_file.read()
sql_file.close()

query_data = {
    'query': sql
}

Кроме того, если вы используете Jupyter, вы можете использовать магические функции BigQuery.

person Messier_31    schedule 26.12.2019