Pyspark: динамически подготовить pyspark-sql запрос, используя параметры - PullRequest
0 голосов
/ 25 сентября 2019

Каковы различные способы динамического связывания параметров и подготовки отчета pyspark-sql.

Пример:

Динамический запрос

query = '''SELECT column1, column2
           FROM ${db_name}.${table_name}
           WHERE column1 = ${filter_value}'''

Над динамическим запросом есть переменные $ {db_name}, $ {table_name} и $ {filter_value}. Эти переменные будут получать значения из параметров времени выполнения.

Подробности параметров:

db_name = 'your_db_name'
table_name = 'your_table_name'
filter_value = 'some_value'

Ожидаемый запрос после привязки параметров в динамическом запросе

SELECT column1, column2
FROM your_db_name.your_table_name
WHERE column1 = some_value  

1 Ответ

1 голос
/ 25 сентября 2019

Вот несколько вариантов подготовки pyspark-sql через параметр привязки.

Параметр # 1 - Использование String Interpolation / f-Strings (Python 3.6+)

db_name = 'your_db_name'
table_name = 'your_table_name'
filter_value = 'some_value'

query = f'''SELECT column1, column2
           FROM {db_name}.{table_name}
           WHERE column1 = {filter_value}'''

Опция # 2 - Использование форматирования строки (формат str.format)

query = '''SELECT column1, column2
           FROM {}.{}
           WHERE column1 = {}'''

db_name = 'your_db_name'
table_name = 'your_table_name'
filter_value = 'some_value'

query.format(db_name, table_name, filter_value)

Опция #3 - Использование строки шаблона

query = '''SELECT column1, column2
           FROM ${db_name}.${table_name}
           WHERE column1 = ${filter_value}'''

db_name = 'your_db_name'
table_name = 'your_table_name'
filter_value = 'some_value'

from string import Template
t = Template(query)
t.substitute(db_name=db_name, table_name=table_name, filter_value=filter_value)      
  • Интерполяция строк / f-строк ( Параметр # 1 ) -рекомендуется, если у вас Python 3.6+, иначе используйте форматирование строки str.format ( Option # 2 )

  • Шаблонная строка более полезна для обработкипредоставленная пользователем строка ( опция # 3 )

...