[HADOOP] 임팔라 : schemata가 다른 여러 개의 마루 파일을 쿼리하는 방법
HADOOP임팔라 : schemata가 다른 여러 개의 마루 파일을 쿼리하는 방법
Spark 2.1에서는 종종 다음과 같은 것을 사용합니다.
df = spark.read.parquet(/path/to/my/files/*.parquet)
다른 schemata로도 마루 파일 폴더를로드합니다. 그런 다음 SparkSQL을 사용하여 데이터 프레임에 대해 일부 SQL 쿼리를 수행합니다.
이제 다음과 같은 문장을 포함하는 위키 기사를 읽었으므로 Impala를 사용 해보고 싶습니다.
그래서 그것은 내 유스 케이스에 맞을 수있는 것처럼 들립니다 (그리고 약간 더 빠를 수도 있습니다).
그러나 내가 다음과 같은 것을 시도하면 :
CREATE EXTERNAL TABLE ingest_parquet_files LIKE PARQUET
'/path/to/my/files/*.parquet'
STORED AS PARQUET
LOCATION '/tmp';
AnalysisException이 발생합니다.
이제 내 질문 : Impala를 사용하여 여러 개의 파블 파일이 들어있는 폴더를 읽을 수 있습니까? Impala는 스파크처럼 스키마 병합을 수행합니까? 이 작업을 수행하려면 어떤 쿼리가 필요합니까? Google을 사용하여 관련 정보를 찾을 수 없습니다. (항상 나쁜 징조 ...)
감사!
해결법
-
==============================
1.내가 이해 한 것에서, 당신은 일부 마루 파일을 가지고 있으며 임팔라 테이블을 통해보고 싶습니까? 아래는 그것에 대한 나의 설명입니다.
내가 이해 한 것에서, 당신은 일부 마루 파일을 가지고 있으며 임팔라 테이블을 통해보고 싶습니까? 아래는 그것에 대한 나의 설명입니다.
외부 테이블을 생성하고 위치를 아래와 같이 마루 파일 디렉토리로 설정할 수 있습니다
CREATE EXTERNAL TABLE ingest_parquet_files(col1 string, col2 string) LOCATION "/path/to/my/files/" STORED AS PARQUET;
테이블을 만든 후 쪽모이 세공 파일을로드하는 또 다른 옵션이 있습니다.
LOAD DATA INPATH "Your/HDFS/PATH" INTO TABLE schema.ingest_parquet_files;
와일드 카드 문자는 LIKE PARQUET 뒤의 경로를 예상하고 해당 위치에서 파일을 찾기 때문에 와일드 카드 문자를 제거해야합니다.
CREATE EXTERNAL TABLE ingest_parquet_files LIKE PARQUET '/path/to/my/files/' STORED AS PARQUET LOCATION '/tmp';
다음은 Cloudera impala doc에서 가져온 템플릿입니다.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name LIKE PARQUET 'hdfs_path_of_parquet_file' [COMMENT 'table_comment'] [PARTITIONED BY (col_name data_type [COMMENT 'col_comment'], ...)] [WITH SERDEPROPERTIES ('key1'='value1', 'key2'='value2', ...)] [ [ROW FORMAT row_format] [STORED AS file_format] ] [LOCATION 'hdfs_path'] [TBLPROPERTIES ('key1'='value1', 'key2'='value2', ...)] [CACHED IN 'pool_name' [WITH REPLICATION = integer] | UNCACHED] data_type: primitive_type | array_type | map_type | struct_type
사용중인 사용자는 임팔라에 제공하는 모든 경로에 대한 읽기 / 쓰기 액세스 권한이 있어야합니다. 아래 단계를 수행하여 달성 할 수 있습니다
#Login as hive superuser to perform the below steps create role <role_name_x>; #For granting to database grant all on database to role <role_name_x>; #For granting to HDFS path grant all on URI '/hdfs/path' to role <role_name_x>; #Granting the role to the user you will use to run the impala job grant role <role_name_x> to group <your_user_name>; #After you perform the below steps you can validate with the below commands #grant role should show the URI or database access when you run the grant role check on the role name as below show grant role <role_name_x>; #Now to validate if the user has access to the role show role grant group <your_user_name>;
역할과 권한이 여기에 어떻게 더 있는지
from https://stackoverflow.com/questions/48343036/impala-how-to-query-against-multiple-parquet-files-with-different-schemata by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hive의 정규 표현식에서 여러 일치 항목 처리 (0) | 2019.08.16 |
---|---|
[HADOOP] Python을 통해 HDFS에서 여러 파일 처리 (0) | 2019.08.16 |
[HADOOP] 하둡-값없이 텍스트 출력을 수집하는 방법 (0) | 2019.08.16 |
[HADOOP] SAS와의 Hadoop 연결 (0) | 2019.08.16 |
[HADOOP] API를 통해 Hbase 리전 크기 가져 오기 (0) | 2019.08.16 |