Trino

[Trino] example-http 커넥터 연결

비번변경 2023. 3. 6. 22:13

 

example-http 커넥터

example-http connector는 http를 통해 쉼표로 구분된 데이터, 즉 CSV 파일을 읽을 때 사용할 수 있다. CSV 데이터가 많은 경우, example-http를 이용해 쿼리를 작성하고 처리할 수 있다.

커넥터의 소스는 trino-example-http 디렉터리에 위치해 있다.

 

이 글에서는 example-http 커넥터를 이용해 예시 데이터를 로드해보려고 한다.

 

 

예시 데이터

데이터 URL : https://github.com/trinodb/trino/tree/master/plugin/trino-example-http/src/test/resources/example-data

 

예시 데이터가 있는 Github 디렉터리로 이동하면 여러 개의 CSV 파일과 example-metadata.json이라는 파일이 존재하는 것을 확인할 수 있다.

CSV 파일은 실제 데이터에 해당하는 파일이고, example-metadata.json 파일은 Catalog 내 Schema, Schema 내 Table 및 컬럼 정보가 정의된 메타데이터 파일이다.

 

 

metadata.json

metadata.json 구조는 다음과 같다.

{
  "<SCHEMA_NAME>": [
    {
      "name": "<TABLE_NAME>",
      "columns": [
        {"name": "<COLUMN_NAME>", "type": "<DATA_TYPE>"},
        ...
      ],
      "sources": ["<DATA_FILE>.csv", ... ]
    },
    ...
  ],
  ...
}

JSON의 최상위 속성으로 Schema 이름을, Schema에는 JSON Array 형식으로 테이블의 이름(name)과 컬럼 정보(columns), 그리고 읽을 데이터 파일(sources)을 정의한다. columns 속성도 JSON Array 형식으로 이름과 데이터 타입을 나열하고, sources 속성은 Array 형식으로 정의한다.

 

 

Catalog 설정

TRINO_HOME/etc/catalog 경로 아래에 example-http 커넥터를 사용하는 카탈로그 설정 파일을 작성한다.

카탈로그 이름은 커넥터 이름과 동일하게 example-http로 설정하며, 스키마와 테이블 구조를 정의하는 metadata.json 파일 위치를 metadata-uri 속성으로 지정한다.

connector.name=example-http
metadata-uri=<MEATDATA.JSON URI>

# 예시
connector.name=example-http
metadata-uri=https://raw.githubusercontent.com/trinodb/trino/master/plugin/trino-example-http/src/test/resources/example-data/example-metadata.json

 

 

Catalog 확인

1. Catalog 인식 확인

SHOW CATALOGS ;

 

2. Schema 및 테이블 확인

카탈로그, 스키마, 테이블 이름 등에 연산자 등의 메타문자가 포함되어 있는 경우 이름을 큰따옴표로 묶어주어야 정상적으로 인식한다.

-- 스키마 확인
SHOW SCHEMAS FROM "exmaple-http";

-- 테이블 확인
SHOW TABLES FROM "exmaple-http".example;
SHOW TABLES FROM "exmaple-http".tpch;

 

3. 테이블 데이터 확인

각 테이블 데이터를 조회해 본다.

SELECT * FROM "exmaple-http".example.numbers;
SELECT * FROM "exmaple-http".tpch.lineitem;
SELECT * FROM "exmaple-http".tpch.orders;

이상이 없으면 위와 같이 테이블이 출력된다. 반면 이상이 있는 경우, 아래와 같은 에러 메시지가 발생하며 테이블이 출력되지 않는다. 

failed: Expected field 3 to be type bigint but is integer

위 에러의 경우 metadata.json에 정의된 3번째(0부터 시작) 필드의 데이터 타입과 실제 값의 데이터 타입에 차이가 있을 때 발생한다. 이 경우 metadata.json을 수정해주어야 한다.

 

 

참고 문서

https://github.com/trinodb/trino/issues/11542

 

 

 

728x90