JDBC 설정

Driverless AI를 통해 Driverless AI 애플리케이션 내에서 Java Database Connectivity(JDBC) 데이터 소스를 탐색할 수 있습니다. 이 섹션에서는 JDBC와 함께 작동할 수 있도록 Driverless AI를 구성하기 위한 지침을 제공합니다.

Note: Docker 설치 버전에 따라, Driverless AI Docker 이미지를 시작할 때는 docker run --runtime=nvidia (Docker 19.03 이후) 또는 nvidia-docker (Docker 19.03 이전) 명령을 사용하십시오. 사용 중인 Docker 버전을 확인하려면 docker version 을 사용하십시오.

테스트된 데이터베이스

다음 데이터베이스는 최소 기능에 대해 테스트되었습니다. 이 목록에 포함되지 않은 JDBC 드라이버는 Driverless AI와 함께 작동해야 합니다. 테스트된 데이터베이스 목록에 없는 경우에도 JDBC 드라이버의 테스트를 권장합니다. 테스트되지 않은 JDBC 드라이버의 사용 방법에 대한 정보는 이 장의 마지막인 테스트되지 않은 JDBC 드라이버 추가 섹션을 참조하십시오.

  • Oracle DB

  • PostgreSQL

  • Amazon Redshift

  • Teradata

구성 속성에 관한 설명

  • jdbc_app_configs: JDBC 커넥터에 대한 구성. 이것은 여러 개의 키를 포함한 JSON/Dictionary 문자열입니다. Note: url, jarpathclasspath 필드를 포함하는 중첩된 JSON에 연결하려면 JSON 키(보통 구성 중인 데이터베이스의 이름)가 필요합니다. 또한 이것은 다음 형식을 취해야 합니다.

"""{"my_jdbc_database": {"url": "jdbc:my_jdbc_database://hostname:port/database",
 "jarpath": "/path/to/my/jdbc/database.jar", "classpath": "com.my.jdbc.Driver"}}"""

예:

"""{
   "postgres": {
   "url": "jdbc:postgresql://ip address:port/postgres",
   "jarpath": "/path/to/postgres_driver.jar",
   "classpath": "org.postgresql.Driver"
   },
   "mysql": {
   "url":"mysql connection string",
   "jarpath": "/path/to/mysql_driver.jar",
   "classpath": "my.sql.classpath.Driver"
   }
}"""

Note: jdbc_app_configs 의 예상 입력값은 JSON string. 입니다. 큰따옴표("...")는 JSON dictionary within 에 키와 값을 나타내는 데 사용해야 하며, outer 따옴표는 "\”", ''', 또는 ' 형식으로 지정해야 합니다. 구성 값의 적용 방식에 따라 다른 형식의 외부 인용이 필요할 수 있습니다. 다음 예제는 외부 인용문을 적용하는 두 가지 독특한 방법을 보여줍니다.

  • config.toml 파일에 적용된 구성값:

    jdbc_app_configs = """{"my_json_string": "value", "json_key_2": "value2"}"""
    
  • ** 환경 변수** 로 적용된 구성 값:

    DRIVERLESS_AI_JDBC_APP_CONFIGS='{"my_json_string": "value", "json_key_2": "value2"}'
    

    예:

    DRIVERLESS_AI_JDBC_APP_CONFIGS='{
    "postgres": {"url": "jdbc:postgresql://192.xxx.x.xxx:aaaa:/name_of_database;user=name_of_user;password=your_password","jarpath": "/config/postgresql-xx.x.x.jar","classpath": "org.postgresql.Driver"},
    "postgres-local": {"url": "jdbc:postgresql://123.xxx.xxx.xxx:aaaa/name_of_database","jarpath": "/config/postgresql-xx.x.x.jar","classpath": "org.postgresql.Driver"},
    "ms-sql": {"url": "jdbc:sqlserver://192.xxx.x.xxx:aaaa;databaseName=name_of_database;user=name_of_user;password=your_password","Username":"your_username","passsword":"your_password","jarpath": "/config/sqljdbc42.jar","classpath": "com.microsoft.sqlserver.jdbc.SQLServerDriver"},
    "oracle": {"url": "jdbc:oracle:thin:@192.xxx.x.xxx:aaaa/orclpdb1","jarpath": "ojdbc7.jar","classpath": "oracle.jdbc.OracleDriver"},
    "db2": {"url": "jdbc:db2://127.x.x.x:aaaaa/name_of_database","jarpath": "db2jcc4.jar","classpath": "com.ibm.db2.jcc.DB2Driver"},
    "mysql": {"url": "jdbc:mysql://192.xxx.x.xxx:aaaa;","jarpath": "mysql-connector.jar","classpath": "com.mysql.jdbc.Driver"},
    "Snowflake": {"url": "jdbc:snowflake://<account_name>.snowflakecomputing.com/?<connection_params>","jarpath": "/config/snowflake-jdbc-x.x.x.jar","classpath": "net.snowflake.client.jdbc.SnowflakeDriver"},
    "Derby": {"url": "jdbc:derby://127.x.x.x:aaaa/name_of_database","jarpath": "/config/derbyclient.jar","classpath": "org.apache.derby.jdbc.ClientDriver"}
    }'\
    
  • jdbc_app_jvm_args: JDBC 커넥터에 대한 추가 jvm args. 예: 《-Xmx4g》.

  • jdbc_app_classpath: 선택적으로 JDBC 커넥터에 대한 대체 클래스패스를 지정하십시오.

  • enabled_file_systems: 활성화할 파일 시스템. 데이터 커넥터를 제대로 작동시키려면 이 시스템을 구성해야 합니다.

JDBC 드라이버 검색

  1. JDBC 드라이버 JAR 파일 다운로드:

Note: 구성 단계(예: org.postgresql.Driver)에 필요하므로 드라이버 클래스패스를 기록하십시오.

  1. Docker 컨테이너에 마운트할 수 있는 위치에 드라이버 JAR를 복사하십시오.

Note: JDBC jar 파일을 저장하는 폴더는 dai 프로세스 사용자가 볼/읽을 수 있어야 합니다.

JDBC 커넥터 활성화

본 예제에서는 PostgresQL용 JDBC 커넥터를 활성화합니다. JDBC 연결 문자열은 사용되는 데이터베이스에 따라 다릅니다.

 nvidia-docker run \
   --pid=host \
   --init \
   --rm \
   --shm-size=256m \
   --add-host name.node:172.16.2.186 \
   -e DRIVERLESS_AI_ENABLED_FILE_SYSTEMS="file,hdfs,jdbc" \
   -e DRIVERLESS_AI_JDBC_APP_CONFIGS='{"postgres":
                                       {"url": "jdbc:postgres://localhost:5432/my_database",
                                       "jarpath": "/path/to/postgresql/jdbc/driver.jar",
                                       "classpath": "org.postgresql.Driver"}}'  \
   -e DRIVERLESS_AI_JDBC_APP_JVM_ARGS="-Xmx2g" \
   -p 12345:12345 \
   -v /path/to/local/postgresql/jdbc/driver.jar:/path/to/postgresql/jdbc/driver.jar \
   -v /etc/passwd:/etc/passwd:ro \
   -v /etc/group:/etc/group:ro \
   -v /tmp/dtmp/:/tmp \
   -v /tmp/dlog/:/log \
   -v /tmp/dlicense/:/license \
   -v /tmp/ddata/:/data \
   -u $(id -u):$(id -g) \
   h2oai/dai-centos7-x86_64:1.10.1-cuda11.2.2.xx

JDBC를 사용하여 데이터 세트 추가

JDBC 커넥터가 활성화된 후, Add Dataset (or Drag and Drop) 드롭다운 메뉴에서 JDBC 를 선택하여 데이터 세트를 추가할 수 있습니다.

Make JDBC Query
  1. 데이터 세트 페이지에서 Add Dataset 버튼을 클릭하십시오.

  2. 표시되는 목록에서 JDBC 를 선택하십시오.

  3. Select JDBC Connection 버튼을 클릭하여 JDBC 구성을 선택하십시오.

  4. 해당 양식은 JDBC 데이터베이스, URL, 드라이버 및 Jar 정보로 채워집니다. 다음 나머지 필드를 완료하십시오.

  • JDBC Username: JDBC 사용자 이름을 입력하십시오.

  • JDBC Password: JDBC 암호를 입력하십시오. (Notes 섹션 참고)

  • Destination Name: 새로운 데이터 세트의 이름을 입력합니다.

  • (옵션) ID Column Name: ID 열의 명칭을 입력하십시오. 대용량 데이터 쿼리 작성 시에는 이 필드를 지정하십시오.

Notes:

  • JDBC URL의 일부로 암호를 포함하지 마십시오. 대신 JDBC Password 필드에 암호를 입력하십시오. 암호는 보안 목적을 위해 별도로 입력합니다.

  • Driverless AI 내의 리소스 공유 때문에, JDBC 커넥터에는 상대적으로 적은 양의 메모리만 할당됩니다.

  • 대용량 쿼리 작성 시, ID 열은 데이터를 관리 가능한 부분으로 분할하는 데 사용됩니다. 이렇게 하면 최대 메모리 할당이 초과되지 않습니다.

  • ID 열의 지정 없이 최대 메모리 할당보다 큰 쿼리가 작성되면 쿼리가 성공적으로 완료되지 않습니다.

  1. 쿼리하고자 하는 데이터베이스 형식으로 SQL 쿼리를 작성합니다(아래의 Query Examples 섹션을 참조하십시오). 형식은 사용되는 데이터베이스에 따라 다릅니다.

  2. Click to Make Query 버튼을 클릭하여 쿼리를 실행합니다. 완료에 소요되는 시간은 쿼리되는 데이터의 크기와 데이터베이스의 네트워크 속도에 따라 달라집니다.

쿼리가 성공하면 데이터 세트 페이지로 돌아가고, 쿼리된 데이터를 새 데이터 세트로 사용할 수 있습니다.

쿼리 예제

다음은 Oracle DB 및 PostgreSQL에 대한 샘플 구성 및 쿼리입니다.

  1. 구성:

jdbc_app_configs = """{"oracledb": {"url": "jdbc:oracle:thin:@localhost:1521/oracledatabase", "jarpath": "/home/ubuntu/jdbc-jars/ojdbc8.jar", "classpath": "oracle.jdbc.OracleDriver"}}"""
  1. 샘플 쿼리:

  • Select JDBC Connection 드롭다운 메뉴에서 oracledb 를 선택합니다.

  • JDBC Username: oracleuser

  • JDBC Password: oracleuserpassword

  • ID Column Name:

  • Query:

SELECT MIN(ID) AS NEW_ID, EDUCATION, COUNT(EDUCATION) FROM my_oracle_schema.creditcardtrain GROUP BY EDUCATION

Note: 해당 쿼리는 ID Column Name 을 지정하지 않으므로 작은 데이터에 대해서만 작동합니다. 그러나 쿼리가 더 큰 데이터를 위한 경우에는 NEW_ID 열이 ID 열로 사용될 수 있습니다.

  1. Click to Make Query 버튼을 클릭하여 쿼리를 실행합니다.

테스트되지 않은 JDBC 드라이버 추가

사내에서 테스트되지 않은 JDBC 드라이버를 사용해 보는 것을 권장합니다.

  1. 데이터베이스용 JDBC jar를 다운로드하십시오.

  2. JDBC jar 파일을 DAI가 액세스할 수 있는 위치로 이동시키십시오.

  3. JDBC 지정 환경 변수를 이용해 Driverless AI Docker 이미지를 시작하십시오.

     nvidia-docker run \
       --pid=host \
       --init \
       --rm \
       --shm-size=256m \
       --add-host name.node:172.16.2.186 \
       -e DRIVERLESS_AI_ENABLED_FILE_SYSTEMS="upload,file,hdfs,s3,recipe_file,jdbc" \
       -e DRIVERLESS_AI_JDBC_APP_CONFIGS="""{"my_jdbc_database": {"url": "jdbc:my_jdbc_database://hostname:port/database",
                                             "jarpath": "/path/to/my/jdbc/database.jar",
                                             "classpath": "com.my.jdbc.Driver"}}"""\
       -e DRIVERLESS_AI_JDBC_APP_JVM_ARGS="-Xmx2g" \
       -p 12345:12345 \
       -v /path/to/local/postgresql/jdbc/driver.jar:/path/to/postgresql/jdbc/driver.jar \
       -v /etc/passwd:/etc/passwd:ro \
       -v /etc/group:/etc/group:ro \
       -v /tmp/dtmp/:/tmp \
       -v /tmp/dlog/:/log \
       -v /tmp/dlicense/:/license \
       -v /tmp/ddata/:/data \
       -u $(id -u):$(id -g) \
       h2oai/dai-centos7-x86_64:1.10.1-cuda11.2.2.xx