HMS 통합을 활성화하지 않으면 Kudu API 또는 Apache Spark와 같은 기타 통합을 통해 생성 된 테이블이 Impala에 자동으로 표시되지 않습니다. 이를 쿼리하려면 먼저 Impala 내에 외부 테이블을 만들어 Kudu 테이블을 Impala 데이터베이스에 매핑해야합니다.
CREATE EXTERNAL TABLE my_mapping_table STORED AS KUDU TBLPROPERTIES ( 'kudu.table_name' = 'my_kudu_table' );
Kudu-HMS 통합이 활성화되면 Impala없이 Kudu에서 테이블을 만들 때 HMS에서 내부 테이블 항목이 자동으로 생성됩니다. Impala를 통해 이러한 테이블에 액세스하려면 invalidate metadataImpala가 최신 메타 데이터를 선택하도록 실행 하십시오.
INVALIDATE METADATA;
Impala에서 새 Kudu 테이블 만들기
Impala에서 Kudu에 새 테이블을 만드는 것은 스키마 및 파티셔닝 정보를 직접 지정해야한다는 점을 제외하고 기존 Kudu 테이블을 Impala 테이블에 매핑하는 것과 유사합니다.
다음 예제를 지침으로 사용하십시오. Impala는 먼저 테이블을 생성 한 다음 매핑을 생성합니다.
CREATE TABLE my_first_table ( id BIGINT, name STRING, PRIMARY KEY(id) ) PARTITION BY HASH PARTITIONS 16 STORED AS KUDU;
에서 CREATE TABLE문, 기본 키를 구성하는 열을 먼저 나열해야합니다. 또한 기본 키 열은 암시 적으로 표시 NOT NULL됩니다.
새 Kudu 테이블을 생성 할 때 배포 체계를 지정해야합니다. 테이블 분할을 참조하십시오 . 위의 테이블 생성 예는 id단순화를 위해 열 을 해싱하여 16 개의 파티션으로 분산됩니다 . 파티셔닝에 대한 지침 은 Thumb의 파티셔닝 규칙을 참조하십시오 .
기본적으로 Impala를 통해 생성 된 Kudu 테이블은 태블릿 복제 요소 3을 사용합니다. Kudu 테이블에 대한 복제 요소를 지정하려면 아래에 표시된대로 문에 TBLPROPERTIES절을 추가 CREATE TABLE합니다. 여기서 n은 사용하려는 복제 요소입니다.
TBLPROPERTIES ('kudu.num_tablet_replicas' = 'n')
복제 인자는 홀수 여야합니다.
kudu.num_tablet_replicas현재 ALTER TABLE을 사용하여 테이블 속성을 변경해 도 효과가 없습니다.
CREATE TABLE AS SELECT
CREATE TABLE … AS SELECT명령문을 사용하여 Impala의 다른 테이블을 쿼리하여 테이블을 만들 수 있습니다 . 다음 예에서는 기존 테이블의 모든 행을 old_tableKudu 테이블로 가져옵니다 new_table. 의 열 이름과 유형은 명령문 new_table 의 결과 세트에있는 열에서 결정됩니다 SELECT. 기본 키와 파티셔닝을 추가로 지정해야합니다.
CREATE TABLE new_table PRIMARY KEY (ts, name) PARTITION BY HASH(name) PARTITIONS 8 STORED AS KUDU AS SELECT ts, name, value FROM old_table;
태블릿 파티션 지정
테이블은 각각 하나 이상의 태블릿 서버에서 제공하는 태블릿으로 나뉩니다. 이상적으로는 태블릿은 테이블의 데이터를 비교적 균등하게 분할해야합니다. Kudu에는 현재 기존 태블릿을 자동 (또는 수동) 분할하는 메커니즘이 없습니다. 이 기능이 구현 될 때까지 테이블을 만들 때 파티션을 지정해야합니다 . 테이블 스키마를 디자인 할 때 비슷한 속도로 증가하는 파티션으로 테이블을 분할 할 수있는 기본 키를 고려하세요. PARTITION BYImpala를 사용하여 테이블을 만들 때 절을 사용하여 파티션을 지정할 수 있습니다 .
기본 키 열이 여러 개인 경우 튜플 구문을 사용하여 파티션 경계를 지정할 수 있습니다 ('va',1), ('ab',2).. 표현식은 유효한 JSON이어야합니다.
Impala 데이터베이스 및 Kudu
모든 Impala 테이블은 데이터베이스 라는 네임 스페이스 내에 포함 됩니다 . 기본 데이터베이스는 default이며 사용자는 원하는대로 추가 데이터베이스를 만들고 삭제할 수 있습니다.
Impala 내에서 관리되는 Kudu 테이블이 생성되면 해당 Kudu 테이블의 이름이 impala::database_name.table_name. 접두사는 항상 impala::이고 데이터베이스 이름과 테이블 이름이 점으로 구분됩니다.
예를 들어, 호출 된 테이블 foo이 barImpala의 데이터베이스 에 생성 되고 Kudu에 저장된 경우 impala::bar.fooKudu 및 bar.foo Impala에서 호출 됩니다 .
Kudu 테이블에서 지원되지 않는 Impala 키워드
쿠두 테이블을 만들 때 다음 임팔라 키워드는 지원되지 않습니다 - PARTITIONED - LOCATION -ROWFORMAT
'기술_Kudu' 카테고리의 다른 글
테이블에 데이터 삽입 (0) | 2022.07.06 |
---|---|
SQL 술어 평가를위한 성능 최적화 (0) | 2022.07.06 |
Apache Impala와 함께 Apache 사용 (0) | 2022.07.06 |
기존 테이블 업그레이드 (0) | 2022.07.06 |
Hive 메타 스토어 통합 활성화 (0) | 2022.07.06 |