Я знаком с SQL (особенно postgres) и VBA, но на стороне искры Apache, я новичок, но кажется, что он запускает и возвращает результаты запросов гораздо быстрее, чем с использованием SQL?
На данный момент в своей повседневной работе я подключаю свой Excel VBA к Postgresql через OLEDB
(другие пользователи используют ODBC
и т. Д.), Поэтому всякий раз, когда мне нужно получить что-то из DB
, яэто можно легко сделать, установив соединение и записав строку SQL в VBA, а затем выгрузив выходные данные в нужные листы и ячейки.Но недостаток заключается в скорости, так как мои данные становятся все больше и больше, когда мне нужно выполнить сложные 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
Мне интересно, сможем ли мы достичь того же самого при соединении с Apache Spark или Hadoopи таким образом возвращать результаты запроса ??
Скажем, каждая из обрабатываемых нами баз данных довольно велика, миллиарды строк (и бесчисленное количество ячеек на строку), и если я выполню некоторые сложные реляционные вычисления в этой БД,в настоящее время postgres на нашем сервере может занять несколько часов, если не дней, чтобы выполнить задачу (даже возвращенные результаты могут быть не такими большими, т.е. не превышать ограничение в 1,6 миллиона строк на лист Excel), стоит ли использовать Hadoop или Sparkчерез VBA, если возможно?
Я знаю, что мы можем сделать это в 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, но может кто-то поделиться вашим мнением, если вы это сделаете, и предоставить некоторый базовый пример кода, чтобы уточнитьу процесса?Спасибо.