обновить таблицу из Pyspark с помощью JDBC - PullRequest
1 голос
/ 06 января 2020

У меня есть небольшой log фрейм данных, в котором есть метаданные, относящиеся к ETL, выполненному в данном ноутбуке, ноутбук является частью большого ETL конвейера, управляемого в Azure DataFactory.

К сожалению, кажется, что Databricks не может вызывать хранимые процедуры, поэтому я вручную добавляю строку с правильными данными в свою таблицу журнала.

однако я не могу определить правильный синтаксис для обновления таблица с заданным набором условий:

оператор, который я использую для добавления одной строки, выглядит следующим образом:

spark_log.write.jdbc(sql_url, 'internal.Job',mode='append')

это работает без проблем, поскольку моя фабрика данных вызывает хранимую процедуру ,

Мне нужно работать с запросом вроде

query  = f"""
UPDATE [internal].[Job] SET
     [MaxIngestionDate]                date                   {date}
,    [DataLakeMetadataRaw]            varchar(MAX)            NULL
,    [DataLakeMetadataCurated]        varchar(MAX)            NULL
WHERE [IsRunning] = 1
AND [FinishDateTime] IS NULL"""

Возможно ли это? если так, то может кто-нибудь показать мне, как?

Глядя на документацию, это, кажется, упоминает только использование операторов select с параметром query:

Целевая база данных - это Azure SQL База данных.

https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

просто добавить, что это крошечная операция, поэтому производительность не является проблемой.

1 Ответ

1 голос
/ 11 января 2020

Вы не можете делать отдельные записи, используя jdb c в Spark с кадрами данных. Вы можете только добавить или заменить всю таблицу.

Вы можете делать обновления, используя pyodb c - требуется установить драйвер MS SQL ODB C ( Как установить PYODB C в Databricks ) или использовать jdb c через JayDeBeApi (https://pypi.org/project/JayDeBeApi/)

...