복붙노트

[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. ==============================

    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>;
    

    역할과 권한이 여기에 어떻게 더 있는지

  2. from https://stackoverflow.com/questions/48343036/impala-how-to-query-against-multiple-parquet-files-with-different-schemata by cc-by-sa and MIT license