Presto 서버에 연결
Presto CLI는 터미널 기반 대화형 셸을 제공하여 쿼리를 실행할 수 있습니다.
IBM® watsonx.data 사용 중인 플랫폼과 유틸리티에 따라 여러 가지 방법으로 Presto 서버에 연결할 수 있습니다. 자세한 내용은 다음 섹션을 참조하세요:
CLI를 사용하여 스키마를 작성할 때 위치를 지정해야 합니다. 예를 들면 다음과 같습니다.
location = s3a://<storage-name>/
전제조건
Presto 엔진 호스트 이름 및 포트 세부 정보 가져오기
-
watsonx.data 웹 콘솔에 로그인합니다.
-
인프라 관리자 로 이동하여 목록 보기를 클릭하십시오.
-
엔진 탭에서 호스트 이름 및 포트 세부사항이 필요한 엔진 이름을 클릭하십시오.
-
호스트 레이블 아래에서 클립보드에 복사 아이콘을 클릭하여 호스트 세부사항을 복사하십시오.
-
호스트 세부사항을 메모장에 복사하십시오.
IBM API키 또는 IBM IAM 토큰 가져오기
요구사항에 따라 IBM API키 또는 IBM IAM 토큰을 사용하십시오.
스트레스 워크로드에 IAM 토큰을 사용하는 것이 좋습니다.
IBM API 키 가져오기
External Identity Interactions Limited
기능을 활성화하고 API 키를 사용하여 watsonx.data 과 통신하는 경우 watsonx.data 이 프로비저닝된 계정에서 API 키를 생성해야 합니다.
-
IBM Cloud 콘솔에 로그인합니다.
-
탐색줄에서 관리 를 클릭하고 액세스 (IAM) 를 선택하십시오.
-
왼쪽 탐색 모음에서 API 키를 클릭합니다.
-
**작성 +**를 클릭하십시오.
-
IBM Cloud API키 작성 창에서 API키의 이름을 입력하고 키에 대한 적절한 설명을 입력하십시오. 예:
ibmlhtoken testing
-
작성을 클릭하십시오. API키가 작성되었습니다 라는 메시지가 있는 창이 표시됩니다.
-
다운로드를 클릭하여 API 키를 로컬 컴퓨터에 저장합니다.
-
다운로드된 파일을 열고 API키를 메모장 파일에 복사하십시오.
IBM Access Management (IAM) 토큰 가져오기
-
IAM에서 REST 엔드포인트를 호출하여 IAM 토큰을 가져오십시오.
-
<your-api-key>
을 IBM API 키로 바꿉니다.curl -X POST 'https://iam.cloud.ibm.com/identity/token' -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=MY_APIKEY'
Presto 엔진에 연결하기 Presto CLI (원격)
-
다음에서 Presto 실행 파일(
jar
)을 다운로드하세요 https://prestodb.io/getting-started/ -
다운로드한 파일의 이름을 presto 로 바꾸십시오.
chmod +x
로 실행 가능하게 만들고 실행하십시오. -
Presto CLI가 설치되어 있는지 확인하려면
./presto --version
실행하세요. Presto CLI 버전이 표시됩니다. 예:Presto CLI 0.281-cfbc6eb
-
Presto CLI가 설치된 시스템에서 다음 명령을 실행합니다. 다음 방법 중 하나를 사용하여 Presto 에 인증할 수 있습니다:
-
사용자 이름과 비밀번호 사용: 이를 위해 다음 명령을 실행하십시오
-
API 키를 사용하는 경우 다음 명령을 실행합니다:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhapikey_<your-username> --password
-
IBM IAM 토큰을 사용하는 경우 다음 명령을 실행합니다:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhtoken_<your-username> --password
<your-username>
는 다른 사용자와의 다중 연결이 있고 이를 구별하려는 경우 선택사항입니다.프롬프트에서 IBM API키 또는 IBM IAM 토큰을 입력하십시오.
-
-
JWT 토큰: JWT 인증 방법은 2.1.2 이후부터 기본적으로 사용할 수 있습니다. 다음 명령을 실행하여 JWT 토큰을 사용하여 프레스토에 연결합니다:
watsonx.data 이전 버전( 2.1.2 릴리스 이전)에서 이 인증 방법을 사용하려면 IBM 지원팀에 문의하여 기능을 활성화하세요.
```bash {: codeblock} ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --access-token <ACCESS_TOKEN> ```
<ACCESS_TOKEN>
를 생성하려면 다음 방법 중 하나를 사용합니다:-
IBM (IAM) 토큰 얻기, (IAM)토큰을 참조하세요.
-
<ACCESS_TOKEN>
를 얻으려면 다음 명령을 사용하십시오curl --location 'https://us-south.lakehouse.dev.cloud.ibm.com/lakehouse/api/v2/auth/authenticate/' \ --header 'Content-Type: application/json' \ --data-raw '{ "username": "ibmlhtoken_<user-name>", "password": "<IAM_TOKEN>", "instance_id": "<instance_id>", "instance_name": "" }'
<IAM_TOKEN>
: Specify the token generated from (IAM) token.<user-name>
: Specify the email id.<instance_id>
: Specify the instance CRN.
-
-
Presto 프롬프트에
show catalogs;
입력합니다. 카탈로그 목록이 표시됩니다. 이제 Presto CLI를 통해 watsonx.data Presto 엔진에 연결되었습니다.presto:default> show catalogs; Catalog -------------- iceberg_data jmx system tpcds tpch (5 rows)
JDBC 사용하여 Presto 엔진에 연결하기
-
클라이언트 시스템에 최신 JDBC 드라이버 를 다운로드하여 설치하십시오.
-
다운로드한
jar
파일을 Java 애플리케이션의 클래스 경로에 추가하십시오. -
API 키를 가져오십시오.
ibmlhapikey
을 사용자 아이디로, API 키를 비밀번호로 사용합니다. 자세한 내용은 IBM API 키 가져오기 를 참조하세요. -
호스트 이름 및 포트를 가져오십시오. 자세한 내용은 Presto 엔진 호스트 이름 및 포트 세부 정보 가져오기를 참조하세요.
-
JDBC 인터페이스를 사용하여 Java 애플리케이션을 작성하십시오. 다음은 Java 스니펫의 예제입니다.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; public class PrestoJdbcSample { public static void main(String[] args) throws Exception { /* * example of fetching the location and credentials needed to connect, from * environment variables */ String username = System.getenv("ENG_USERNAME"); String password = System.getenv("ENG_PASSWORD"); String hostname = System.getenv("ENG_HOST"); String portnumber = System.getenv("ENG_PORT"); String presto_url = "jdbc:presto://" + hostname + ":" + portnumber; Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { /* load the Presto JDBC Driver class */ String driverClass = "com.facebook.presto.jdbc.PrestoDriver"; Class.forName(driverClass); /* Set the connection properties */ Properties properties = new Properties(); properties.setProperty("user", username); properties.setProperty("password", password); properties.setProperty("SSL", "true"); /* Connect */ connection = DriverManager.getConnection(presto_url, properties); /* Issue a Query */ String query = "SELECT * FROM tpch.tiny.customer LIMIT 10"; statement = connection.createStatement(); resultSet = statement.executeQuery(query); /* iterate through the results */ while (resultSet.next()) { String phone = resultSet.getString("phone"); String name = resultSet.getString("name"); System.out.println("phone = " + phone + ", name = " + name); } } catch (Exception e) { e.printStackTrace(); } finally { /* clean up at the end always **/ if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } } }
명령의 매개변수를 다음으로 바꾸십시오.
<PRESTO_URL>
Jdbc URL 를 Presto 서버에 식별합니다.<EMAIL_ID>
를 이메일 ID로<API_KEY>
에 API 키를 입력합니다IBM IAM 토큰을 사용하는 경우
ibmapikey
을ibmlhtoken
로 바꾸고 토큰을 전달합니다. -
명령을 컴파일하고 실행합니다.
Python 스크립트를 사용하여 Presto 엔진에 연결하기
-
클라이언트 워크스테이션에 python 3.x (3.10 이상 권장) 및
pip3
를 설치하십시오. -
DBAPI 인터페이스를 사용하여 Presto 쿼리합니다. 다음은 샘플 python 스크립트입니다.
import os import prestodb username=os.environ["ENG_USERNAME"] password=os.environ["ENG_PASSWORD"] hostname=os.environ["ENG_HOST"] portnumber=os.environ["ENG_PORT"] with prestodb.dbapi.connect( host=hostname, port=portnumber, user=username, catalog='tpch', schema='tiny', http_scheme='https', auth=prestodb.auth.BasicAuthentication(username,password) ) as conn: cur = conn.cursor() cur.execute('select * from tpch.tiny.customer limit 10') rows = cur.fetchall() print(rows)
이 명령은 Presto 클러스터의 노드를 표시하는
system.runtime.nodes
시스템 테이블을 쿼리합니다.prestodb.dbapi
의 DBAPI 구현은 몇 개의 행을 검색하는 메소드를 제공합니다. 예를 들어,Cursorfetchone()
또는Cursor.fetchmany()
입니다. 기본적으로Cursor.fetchmany()
는 한 행을 페치합니다.prestodb.dbapi.Cursor.arraysize
를 적절하게 설정하십시오. -
명령을 컴파일하고 실행합니다.