Я решил, с очень интенсивным подходом try & error. Теперь это очень понятно.
Я использовал локальные файлы конфигурации пользователя, чтобы избежать проблем с разрешениями. Те, что в / etc / пусты.
Это содержимое моего файла .odbcinst.ini:
$ cat .odbcinst.ini
[ODBC Drivers]
Simba ODBC Driver for Google BigQuery 64-bit=Installed
[Simba ODBC Driver for Google BigQuery 64-bit]
Description=Simba ODBC Driver for Google BigQuery (64-bit)
Driver=<local user installation path>/simba/googlebigqueryodbc/lib/64/libgooglebigqueryodbc_sb64.so
и вот мой .odbc.ini:
$ cat .odbc.ini
[bigquery_odbc]
Driver=Simba ODBC Driver for Google BigQuery 64-bit
Catalog=<gcp project id>
OAuthMechanism=0
Email= <email service account>
KeyFilePath=<path to the json file downloaded when creating the service account>
Здесь вы сможете успешно выполнить
isql -v bigquery_odbc
Теперь, если я пытаюсь подключиться с помощью pyodbc, я получаю ошибку выше.
Сначала исправьте путь установки, указанный в файле конфигурации, а также кодировку UTF, указанную здесь
$ cat <local user installation path>/simba/googlebigqueryodbc/lib/64/simba.googlebigqueryodbc.ini
# To use this INI file, replace $(INSTALLDIR) with the
# directory the tarball was extracted to.
[Driver]
DriverManagerEncoding=UTF-16
ErrorMessagesPath=<local user installation path>simba/googlebigqueryodbc/ErrorMessages
LogLevel=0
LogPath=<log path>
LogFileCount=5
LogFileSize=10
При вызове pyodbc он работал:
dataset_name = <bigquery dataset name>
DSN = 'bigquery_odbc'
conn_str = "DSN={}".format(DSN)
cnxn = pyodbc.connect(conn_str, autocommit=True) # DO NOT forget autocommit param
cursor = cnxn.cursor()
cursor.execute('select * from {}.table;'.format(dataset_name))
print(cursor.fetchone())
Я много боролся с этой конфигурацией. Надеюсь, что это помогает другим