我熟悉sql(尤其是postgres)和vba,但是在apachespark方面,我是一个完全的新手,但是它运行和返回查询结果的速度似乎比使用sql快得多?
在我的日常工作中,我把excelvba和postgresql通过 OLEDB
(其他ppl使用) ODBC
所以每当我需要从 DB
,我可以通过设置一个连接并在vba中编写一个sql字符串,然后将输出转储到所需的表和单元格中来轻松地实现这一点。但缺点是速度,当我需要运行复杂的程序时,我的数据越来越大 SQL queries
对于复杂的计算或关系,需要很长时间才能得到结果。
所以除了升级我们的服务器 DB
,我听说了 Spark/Hadoop
加快这项任务的解决办法是什么?
通常,当我需要进行vba postgres交互时,我会执行以下操作:
Public Sub refresh_cf()
Dim dataConn As New ADODB.Connection
Dim strSQL As String
Dim strCON As String
Dim strCmd As New ADODB.Command
Dim loadTable As QueryTable
strCON = "Server=server IP;" & _
"DSN=PostgreSQL35W;" & _
"UID=USERNAME;" & _
"PWD=PASSWORD;" & _
"Database=DBNAME;" & _
"Port=5432;" & _
"CommandTimeout=12"
dataConn.ConnectionString = strCON
dataConn.Open
strSQL = "SELECT * FROM TABLE WHERE...."
strCmd.ActiveConnection = dataConn
strCmd.CommandType = adCmdText
strCmd.CommandText = strSQL
strCmd.CommandTimeout = 0
Set loadTable = Sheet2.QueryTables.Add(Connection:=strCmd.Execute,
Destination:=Sheet2.Range("A4"))
With loadTable
.BackgroundQuery = False
.AdjustColumnWidth = False
.refresh
End With
End Sub
我想知道我们是否可以实现同样的连接apachespark或hadoop并通过这种方式返回查询结果??
假设我们正在处理的每个数据库都相当庞大,有数十亿行(每行有无数个单元格),如果我在这个数据库中执行一些复杂的关系计算,目前我们服务器上的postgres可能需要数小时甚至数天才能完成任务(即使返回的结果可能没有那么大,即不超过每张excel表格160万行的限制),如果可能的话,是否值得通过vba使用hadoop或spark?
我知道我们可以在 Python
当然,类似于:
python
from pyspark.sql import HiveContext, Row
# or
from pyspark.sql import SQLContext, Row
sc = SparkContext(...)
hiveCtx = HiveContext(sc)
# Then we can run query
hiveCtx.sql("""SELECT * FROM TABLE WHERE....""")
此外,我还找到了一个将odbc连接引入hadoop的链接,但是如果您这样做的话,是否有人可以分享您的方法,并提供一些基本的示例代码来阐明这个过程?谢谢。
1条答案
按热度按时间qncylg1j1#
我的个人笔记本电脑上没有安装hadoop,所以我无法测试这个过程,但我认为它应该是这样的。
你可以在这里看到所有的细节。
https://docs.microsoft.com/en-us/azure/hdinsight/hadoop/apache-hadoop-connect-excel-hive-odbc-driver