用 pyodbc 复制 SQL Table
Copy SQL Table with pyodbc
我正在尝试使用 Databricks 将 SQL table 从一个数据库复制到另一台服务器中的另一个数据库。我听说这样做的一种方法是使用 pyodbc,因为我需要从存储过程中读取数据; JDBC 不支持从存储过程中读取。我想使用类似于下面的代码:
import pyodbc
conn = pyodbc.connect( 'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=mydatabe.database.azure.net;'
'DATABASE=AdventureWorks;UID=jonnyFast;'
'PWD=MyPassword')
# Example getting records back from stored procedure (could also be a SELECT statement)
cursor = conn.cursor()
execsp = "EXEC GetConfig 'Dev'"
conn.autocommit = True
cursor.execute(execsp)
# Get all records
rc = cursor.fetchall()
问题是,一旦我使用 pyodbc 将数据放入 rc 变量中,我应该费心将数据移动到 Databricks Dataframe 中,还是应该将数据推送到我的目的地?
您可能不需要将数据转换为Dataframe,只需将数据写入目标即可。但这实际上取决于您尝试推送的数据量——如果它很多,那么创建 Dataframe 可能会有所帮助,因为它将并行化写入(但这可能会使服务器过载)。如果不是那么多数据,就写到目的地。
此外,在这种情况下,您的工作节点并未真正使用,因为所有处理都将在驱动程序节点上进行 - 您可以考虑使用所谓的 Single Node Cluster,但您需要调整大小相应于您的结果集的驱动程序节点。
P.S。您还可以查看此 answer.
中列出的替代方案
我正在尝试使用 Databricks 将 SQL table 从一个数据库复制到另一台服务器中的另一个数据库。我听说这样做的一种方法是使用 pyodbc,因为我需要从存储过程中读取数据; JDBC 不支持从存储过程中读取。我想使用类似于下面的代码:
import pyodbc
conn = pyodbc.connect( 'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=mydatabe.database.azure.net;'
'DATABASE=AdventureWorks;UID=jonnyFast;'
'PWD=MyPassword')
# Example getting records back from stored procedure (could also be a SELECT statement)
cursor = conn.cursor()
execsp = "EXEC GetConfig 'Dev'"
conn.autocommit = True
cursor.execute(execsp)
# Get all records
rc = cursor.fetchall()
问题是,一旦我使用 pyodbc 将数据放入 rc 变量中,我应该费心将数据移动到 Databricks Dataframe 中,还是应该将数据推送到我的目的地?
您可能不需要将数据转换为Dataframe,只需将数据写入目标即可。但这实际上取决于您尝试推送的数据量——如果它很多,那么创建 Dataframe 可能会有所帮助,因为它将并行化写入(但这可能会使服务器过载)。如果不是那么多数据,就写到目的地。
此外,在这种情况下,您的工作节点并未真正使用,因为所有处理都将在驱动程序节点上进行 - 您可以考虑使用所谓的 Single Node Cluster,但您需要调整大小相应于您的结果集的驱动程序节点。
P.S。您还可以查看此 answer.
中列出的替代方案