Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ODBC под Windows продолжение... #37

Closed
filimonov opened this issue Oct 25, 2017 · 7 comments
Closed

ODBC под Windows продолжение... #37

filimonov opened this issue Oct 25, 2017 · 7 comments

Comments

@filimonov
Copy link
Collaborator

Пробую добраться до данных в кликхаусе стандартными средствами Windows - через ODBC и Excel.

Похоже что 32 битный Еxcel (офис 2010) требует наличия 32-битного драйвера ODBC на 64-битной системе (Windows 7). При этом если поставить только 32-битный драйвер то настроить DSN из панели управления не получается.

Но это всё вступление (может кому-то и оно пригодится). Теперь к проблемам.

Из экселя пробую вытащить данные. Если использую Unicode драйвер, то Microsoft Query просто умирает. Сообщение об ошибке в журнале событий такое:
Имя сбойного приложения: MSQRY32.EXE, версия: 14.0.7010.1000, отметка времени: 0x511cfec4
Имя сбойного модуля: ODBC32.dll, версия: 6.1.7601.17514, отметка времени 0x4ce7b964
Код исключения: 0xc0000409
Смещение ошибки: 0x00056a09
Идентификатор сбойного процесса: 0x15f4
Время запуска сбойного приложения: 0x01d34d109c72c044
Путь сбойного приложения: C:\Program Files (x86)\Microsoft Office\Office14\MSQRY32.EXE
Путь сбойного модуля: C:\Windows\system32\ODBC32.dll
Код отчета: dcc5f386-b903-11e7-8c07-7824af8aa99d
(не очень полезно наверное, но не знаю что ещё приложить)

С ANSI-драйвером - запускается, но дальше тоже всё не весело:

Таблицы с полями типа Enum не работают - ошибка такая: Can't pase name of type: Enum8('VALID' = 1, 'DELETED' = 2)

Таблицы без Enum - при попытках селектов возвращают исключение DB::Exception: Unknown identifier: table.column, e.what() = DB::Exception

В query_log это выглядит так:

Row 22:
───────
type: 3
event_date: 2017-10-25
event_time: 2017-10-25 21:38:22
query_start_time: 2017-10-25 21:38:22
query_duration_ms: 0
read_rows: 0
read_bytes: 0
written_rows: 0
written_bytes: 0
result_rows: 0
result_bytes: 0
memory_usage: 0
query: SELECT table.сolumn\r\nFROM db.table table
exception: Code: 47, e.displayText() = DB::Exception: Unknown identifier: table.column, e.what() = DB::Exception
stack_trace: 0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x2863bf6]\n1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, int)+0x1f) [0x1005e1f]\n2. clickhouse-server(DB::ExpressionAnalyzer::getRequiredColumnsabi:cxx11+0xf3) [0x2bcf9e3]\n3. clickhouse-server(DB::InterpreterSelectQuery::executeFetchColumns()+0x71) [0x27c8301]\n4. clickhouse-server(DB::InterpreterSelectQuery::executeSingleQuery()+0x23) [0x27c60d3]\n5. clickhouse-server(DB::InterpreterSelectQuery::executeWithoutUnion()+0x1a5) [0x27c7c35]\n6. clickhouse-server(DB::InterpreterSelectQuery::execute()+0x22) [0x27c7c82]\n7. clickhouse-server() [0x284db27]\n8. clickhouse-server(DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::function<void (std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)>)+0x1dd) [0x284ec7d]\n9. clickhouse-server(DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&)+0x19ff) [0x100e06f]\n10. clickhouse-server(DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)+0x31c) [0x100fa9c]\n11. clickhouse-server(Poco::Net::HTTPServerConnection::run()+0x2c0) [0x30ba360]\n12. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x30b336f]\n13. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x12b) [0x30b49eb]\n14. clickhouse-server(Poco::PooledThread::run()+0xa7) [0x31c7357]\n15. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x96) [0x31c1ab6]\n16. /lib64/libpthread.so.0(+0x7e25) [0x7f3a1bb99e25]\n17. /lib64/libc.so.6(clone+0x6d) [0x7f3a1946b34d]\n
is_initial_query: 1
user: user
query_id: 55610de4-7f0b-403a-8b2c-067e7546763f
address: \0\0\0\0\0\0\0\0\0\0▒▒W̖▒
port: 26758
initial_user: user
initial_query_id: 55610de4-7f0b-403a-8b2c-067e7546763f
initial_address: \0\0\0\0\0\0\0\0\0\0▒▒W̖▒
initial_port: 26758
interface: 2
os_user:
client_hostname:
client_name:
client_revision: 0
http_method: 2
http_user_agent:
quota_key:
revision: 54236

Похоже это связано с тем что версия сервера относительно старая, ещё без поддержки SELECT table.column. На сервере с новой версией вроде бы работает, но там пока нет данных.

@artpaul
Copy link
Contributor

artpaul commented Oct 26, 2017

Тут надо всё разбить на несколько пунктов.

  1. 32-битные программы работают только с 32-драйверами, а 64-битные программы - с 64-битными, и ни как иначе. Настроить DSN для 32-битного драйвера можно, если открыть PowerShell в 32-битном варианте (x86) и из него запустить Odbcad32.exe.

  2. Enum не поддерживается, да, это надо отдельно поправить.

  3. Что касается table.column, то надо переходить на свежую версию сервера, иначе мало какие программы будут нормально работать через ODBC.

@filimonov
Copy link
Collaborator Author

Угу. Всё так, описал просто последовательность действий, может пригодиться если кто-то будет гуглить, да и можно бы какую-то документацию сделать, чтоб каждому кто пробует не нужно было на те же грабли наступать каждый раз.

Ещё один важный пункт:
4. При попытке использовать сочетание Unicode драйвер + Microsoft Query, последний просто умирает. (проверил, и например с Mysql Unicode драйвером такой проблемы нет).

@artpaul
Copy link
Contributor

artpaul commented Oct 30, 2017

Enum'ы починил. Но с Microsoft Query у меня какая-то беда, такое ощущение, что он куда-то закэшировал себе старую версию драйвера и попытка открыть таблицу с Enum выдаёт сообщение, которого в коде уже нет. Возможно, что у вас что-то похожее.

@levonet
Copy link

levonet commented Dec 21, 2017

Если не секрет, то каким способом ты починил Enum?

@artpaul
Copy link
Contributor

artpaul commented Dec 21, 2017

3297249

@levonet
Copy link

levonet commented Dec 26, 2017

Тогда странно, я использую 2017-11-07, clickhouse_odbc_x64.msi
При этом получаю ошибку от odbc:

... ErrorMsg: can't pase name of type: Enum8('UNDEFINED' = 0, 'UNKNOWN' = 1, 'GET' = 2, 'HEAD' = 3, 'POST' = 4, 'PUT' = 5, ...)

если в select использую поле с типом Enum8. Помогает только оборачивание в toString().

@iShift
Copy link

iShift commented May 11, 2018

По разному пробовали завести линк, выходит ошибка: The OLE DB provider "MSDASQL" for linked server "CLICKHOUSE_TEST" indicates that either the object has no columns or the current user does not have permissions on that object что делать то?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants