Как подключиться к Apache spark / hadoop из VBA - PullRequest
1 голос
/ 30 мая 2019

Я знаком с 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, но может кто-то поделиться вашим мнением, если вы это сделаете, и предоставить некоторый базовый пример кода, чтобы уточнитьу процесса?Спасибо.

1 Ответ

1 голос
/ 07 июня 2019

У меня не установлен Hadoop на моем персональном ноутбуке, поэтому я не могу протестировать этот процесс, но я думаю, что по сути это должно быть так.

enter image description here

enter image description here

enter image description here

Вы можете увидеть все детали здесь.

https://docs.microsoft.com/en-us/azure/hdinsight/hadoop/apache-hadoop-connect-excel-hive-odbc-driver

...