[英]Is it possible to read data from a MSSQL database using Apache Beam?
我一直在尝试使用 Apache Beam 连接到 Azure 数据库,并希望使用 pandas 在数据帧中加载一些数据。 为此,我一直在使用 apache_beam.io.jdbc 模块。
除了以下内容,我找不到关于该主题的任何真实文档: https://beam.apache.org/releases/pydoc/2.43.0/apache_beam.io.jdbc.html
import apache_beam as beam
from apache_beam.io.jdbc import ReadFromJdbc
with beam.Pipeline() as p:
result = (p
| 'Read from jdbc' >> ReadFromJdbc(
fetch_size=None,
table_name='table_name',
driver_class_name='com.microsoft.sqlserver.jdbc.SQLServerDriver',
jdbc_url='jdbc:sqlserver://xxx:1433',
username='xxx',
password='xxx',
query='SELECT * from table_name',
connection_properties = ';database=xxx;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;'
)
|beam.Map(print)
)
我知道有更简单的方法可以做到这一点,但我需要这种方法才能使用 DataFlow 将数据提取到 GoogleCloud BigQuery。
Apache Beam 甚至打算从数据库加载数据吗?
如果你想在Beam
上应用这个逻辑并从MSSQL
数据库加载到BigQuery
,你可以使用纯Beam
代码而不是使用 dataframe:
import apache_beam as beam
from apache_beam.io.jdbc import ReadFromJdbc
from apache_beam.options.pipeline_options import PipelineOptions
pipeline_options = PipelineOptions()
with beam.Pipeline(options=pipeline_options) as p:
(
p | 'Read from jdbc' >> ReadFromJdbc(
table_name='jdbc_external_test_read',
driver_class_name='com.microsoft.sqlserver.jdbc.SQLServerDriver',
jdbc_url='jdbc:sqlserver://xxx:1433',
username='postgres',
password='postgres',
classpath=['com.microsoft.sqlserver:mssql-jdbc:11.2.2.jre8'])
| "Your transformation before BQ if neeeded" >> beam.Map(your_transform)
| "write_hist_intraday" >> beam.io.WriteToBigQuery(
project="project_id",
dataset="dataset",
table="table",
create_disposition=beam.io.BigQueryDisposition.CREATE_NEVER,
write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND)
)
def your_transform(element):
# apply your transformation logic
ReadFromJdbc
从MQSQL
数据库中读取您的数据(查看详细信息以访问外部数据库)BigQuery
之前应用Map
的转换WriteToBigQuery
IO 将结果写入BigQuery
。结果应该是与BigQuery
表的架构匹配的 Python Dict
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.