Back to Arrow

README

cpp/src/arrow/flight/sql/odbc/README.md

latest5.7 KB
Original Source
<!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->

Steps to Register the 64-bit Apache Arrow ODBC driver on Windows

After the build succeeds, the ODBC DLL will be located in build\debug\Debug for a debug build and build\release\Release for a release build.

  1. Open Windows Power Shell as administrator.

  2. Register your ODBC DLL:

    Need to replace <path\to\repo> with actual path to repository in the commands.

    1. cd <path\to\repo>
    2. Run script to register your ODBC DLL as Apache Arrow Flight SQL ODBC Driver
      .\cpp\src\arrow\flight\sql\odbc\tests\install_odbc.cmd <path\to\repo>\cpp\build\< release | debug >\< Release | Debug>\arrow_flight_sql_odbc.dll
      
      Example command for reference:
      .\cpp\src\arrow\flight\sql\odbc\tests\install_odbc.cmd C:\path\to\arrow\cpp\build\release\Release\arrow_flight_sql_odbc.dll
      

If the registration is successful, then Apache Arrow Flight SQL ODBC Driver should show as an available ODBC driver in the x64 ODBC Driver Manager.

Steps to Generate Windows Installer

  1. Install WiX toolset v6 from GitHub.
  2. Build with ARROW_FLIGHT_SQL_ODBC=ON and ARROW_FLIGHT_SQL_ODBC_INSTALLER=ON.
  3. cd to build folder.
  4. Run cpack.

If the generation is successful, you will find Apache-Arrow-Flight-SQL-ODBC-<version>-win64.msi generated under the build folder.

Steps to Enable Logging

Arrow Flight SQL ODBC driver uses Arrow's internal logging framework. By default, the log messages are printed to the terminal.

  1. Set environment variable ARROW_ODBC_LOG_LEVEL to any of the following valid values to enable logging. If ARROW_ODBC_LOG_LEVEL is set to a non-empty string that does not match any of the following values, DEBUG level is used by default.

The characters are case-insensitive.

  • TRACE
  • DEBUG
  • INFO
  • WARNING
  • ERROR
  • FATAL

The Windows ODBC driver currently does not support writing log files. ARROW_USE_GLOG is required to write log files, and ARROW_USE_GLOG is disabled on Windows platform since plasma using glog is not fully tested on windows.

Note: GH-47670 running more than 1 tests with logging enabled is not fully supported.

Steps to Run the ODBC tests

After ODBC has been registered, you can run the ODBC tests. It is recommended to run the ODBC tests locally first.

  1. Run ODBC unit test:

    .\cpp\build\< release | debug >\< Release | Debug>\arrow-odbc-spi-impl-test.exe
    
  2. Set up and run ODBC remote test:

    1. Set up a Dremio open source docker instance:

      1. Run this command inside the docker terminal to create a Dremio open source docker.

        docker run -p 9047:9047 -p 31010:31010 -p 45678:45678 -p 32010:32010 -e DREMIO_JAVA_SERVER_EXTRA_OPTS=-Dpaths.dist=file:///opt/dremio/data/dist dremio/dremio-oss
        
      2. Enable unicode support in Docker:

        1. Open dremio-env in an editor. The file is located in the /opt/dremio/conf directory.
        2. Set the DREMIO_JAVA_SERVER_EXTRA_OPTS property to the following value:
          DREMIO_JAVA_SERVER_EXTRA_OPTS='-Dsaffron.default.charset=UTF-8 -Dsaffron.default.nationalcharset=UTF-8 -Dsaffron.default.collation.name=UTF-8$en_US'
          
      3. Navigate to: http://localhost:9047 and create an user account. The account credentials will be used for remote testing.

      4. Create test table:

        Run this query inside Dremio

        Create Table $scratch.ODBCTest As 
        SELECT
          CAST(2147483647 AS INTEGER) AS sinteger_max,
        
          CAST(9223372036854775807 AS BIGINT) AS sbigint_max,
        
          CAST(999999999 AS DECIMAL(38, 0)) AS decimal_positive,
        
          CAST(3.40282347E38 AS FLOAT) AS float_max,
        
          CAST(1.7976931348623157E308 AS DOUBLE) AS double_max,
        
          CAST(true AS BOOLEAN) AS bit_true,
        
          CAST(DATE '9999-12-31' AS DATE) AS date_max,
          CAST(TIME '23:59:59' AS TIME) AS time_max,
          CAST(TIMESTAMP '9999-12-31 23:59:59' AS TIMESTAMP) AS timestamp_max;
        
      5. The docker instance only needs to be set up once, and can be re-used for running the tests.

    2. Replace REDACTED with actual Dremio docker credentials in the command. Set environment variable ARROW_FLIGHT_SQL_ODBC_CONN to

      driver={Apache Arrow Flight SQL ODBC Driver};HOST=localhost;port=32010;pwd=REDACTED;uid=REDACTED;useEncryption=false;useWideChar=true;
      
    3. Run ODBC remote test:

      .\cpp\build\< release | debug >\< Release | Debug>\arrow-flight-sql-odbc-test.exe
      

Known Limitations

  • Conversion from timestamp data type with specified time zone value to strings is not supported at the moment. This doesn't impact driver's usage of retrieving timestamp data from Power BI on Windows, and Excel on macOS and Windows. See GH-47504 for more context.
  • Conversion from strings to big int data type has a limit range of -9007199254740992 to 9007199254740992.