从 erlang 调用 :odbc.connect 在 Mac M1 上加载 Snowflake ODBC 驱动程序时出错

ole*_*ole 5 erlang odbc elixir snowflake-cloud-data-platform

我在 arm64 Mac m1 上的 elixir 应用程序中加载雪花驱动程序时遇到问题(在 x86 上运行顺利)。\n已安装:

\n
    \n
  • unixodbc
  • \n
  • 带有 odbc 支持的 Erlang 24.1.2
  • \n
  • 雪花驱动程序
  • \n
  • ODBC
  • \n
  • ODBC 管理器和 iODBC 管理器
  • \n
\n

以下是我的 odbc 安装的配置

\n
\n    \xe2\x9e\x9c  sandbox odbcinst -j\n    unixODBC 2.3.9\n    DRIVERS............: /usr/local/etc/odbcinst.ini\n    SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini\n    FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources\n    USER DATA SOURCES..: /Users/or/.odbc.ini\n    SQLULEN Size.......: 8\n    SQLLEN Size........: 8\n    SQLSETPOSIROW Size.: 8\n\n    \xe2\x9e\x9c  sandbox cat /usr/local/etc/odbcinst.ini\n    [ODBC Drivers]\n    SnowflakeDSIIDriver=Installed\n\n    [SnowflakeDSIIDriver]\n    APILevel=1\n    ConnectFunctions=YYY\n    Description=Snowflake DSII\n    Driver=/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib\n    DriverODBCVer=03.52\n    SQLLevel=1\n\n    ODBCInstLib=/usr/local/iODBC/lib/libiodbcinst.dylib\n\n\n\n    \xe2\x9e\x9c  sandbox cat /opt/snowflake/snowflakeodbc/lib/universal/simba.snowflake.ini\n    [Driver]\n    ANSIENCODING=UTF-8\n    DriverManagerEncoding=UTF-32\n    DriverLocale=en-US\n    ErrorMessagesPath=/opt/snowflake/snowflakeodbc/ErrorMessages\n    LogLevel=0\n    LogPath=\n    CURLVerboseMode=false\n    CABundleFile=/opt/snowflake/snowflakeodbc/lib/universal/cacert.pem\n\n    ODBCInstLib=libodbcinst.dylib\n\n\n\xe2\x9e\x9c  sandbox cat /usr/local/etc/odbc.ini\n[ODBC Data Sources]\nSNOWFLAKE_ODBC = SnowflakeDSIIDriver\n\n[SNOWFLAKE_ODBC]\nDriver      = /opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib\nDescription =  Internal Snowflake\nuid         = <>\nserver      = MY_SERVER\ndatabase    = <>\nschema      = <>\nwarehouse   = <>\nrole        = MY_ROLE\ntracing     = 6\n\xe2\x9e\x9c  sandbox \n\n\xe2\x9e\x9c  sandbox odbcinst -s -q                                                          \n[SNOWFLAKE_ODBC]\n\n\n\n\xe2\x9e\x9c  sandbox isql -v SNOWFLAKE_ODBC <USERNAME> <PASSWORD>          \n+---------------------------------------+\n| Connected!                            |\n|                                       |\n| sql-statement                         |\n| help [tablename]                      |\n| quit                                  |\n|                                       |\n+---------------------------------------+\nSQL> \n\n\n\xe2\x9e\x9c  sandbox /usr/local/iODBC/bin/iodbctest                                        \niODBC Demonstration program\nThis program shows an interactive SQL processor\nDriver Manager: 03.52.1521.0607\n\nEnter ODBC connect string (? shows list): \n\nDSN                              | Driver                                  \n------------------------------------------------------------------------------\nSnowflakeDSII                    | Snowflake                               \n\nEnter ODBC connect string (? shows list): SnowflakeDSII\n1: SQLDriverConnect = [iODBC][Driver Manager]dlopen(/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib, 6): no suitable image found.  Did find:\n    /opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib: no matching architecture in universal wrapper\n    /opt/snowfl (0) SQLSTATE=00000\n2: SQLDriverConnect = [iODBC][Driver Manager]Specified driver could not be loaded (0) SQLSTATE=IM003\n\n
Run Code Online (Sandbox Code Playgroud)\n

我可以通过 isql 连接,iodbctest 失败,我的简单测试用例失败:

\n
defmodule Sandbox.OdbcTest do\nuse Sandbox.OdbcCase\n\n\ntest "test odbc" do\n    conn_str = \'dsn=SnowflakeDSII\'\n    IO.inspect :odbc.connect(conn_str, [])\nend\nend\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试将连接字符串设置为:\nconn_str = \'driver=/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib;server=<SERVER>;uid=<USERNAME>;pwd=<PASSWORD>;role=<ROLE>;warehouse=TEST_WH;\'

\n
\xe2\x9e\x9c  sandbox mix test test/odbc_test.exs                                           \ntrue\n\'driver=/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib;<MY_DSN>\'\n{:error,\n \'[unixODBC][Driver Manager]Can\\\'t open lib \\\'/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib\\\' : file not found SQLSTATE IS: 01000 Connection to database failed.\'}\n.\n\nFinished in 0.05 seconds (0.00s async, 0.05s sync)\n1 test, 0 failures\n\nRandomized with seed 529170\n
Run Code Online (Sandbox Code Playgroud)\n

恐怕来自 iodbstest 的消息解释了一切,但我希望有解决方案。\n我遵循了这些文章:\n https://docs.snowflake.com/en/user-guide/odbc-mac.html

\n

https://community.snowflake.com/s/article/How-to-create-Snowflake-ODBC-DSN-On-MacOS

\n

如何在 M1 Apple Silicon Mac 上成功安装 Snowflake 的 ODBC 驱动程序?

\n

Sri*_*non 3

Snowflake 提供的 ODBC 驱动程序尚不支持 M1 的 ARM 处理器。