Как создать паркетный стол - PullRequest
0 голосов
/ 14 октября 2019

Вот пример оператора создания таблицы, который работает как положено.

CREATE EXTERNAL TABLE default.reviews(
  marketplace varchar(10), 
  customer_id varchar(15), 
  review_id varchar(15), 
  product_id varchar(25), 
  product_parent varchar(15), 
  product_title varchar(50), 
  star_rating int, 
  helpful_votes int, 
  total_votes int, 
  vine varchar(5), 
  verified_purchase varchar(5), 
  review_headline varchar(25), 
  review_body varchar(1024), 
  review_date date, 
  year int)
PARTITIONED BY ( 
  product_category varchar(25))
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://amazon-reviews-pds/parquet/';

При восстановлении таблицы появляется ошибка:

MSCK REPAIR TABLE default.reviews

Разделы, не входящие в metastore: отзывы: product_category = Отзывы об одежде: product_category = Automotive

  1. Если раздел не находится в metastore, как получить счет3,5 миллиона?

    SELECT 
        COUNT(*) 
    FROM 
        "default"."reviews" 
    WHERE 
        product_category='Automotive'
    
    -- OUTPUT
    3516476
    
  2. Как мне убедиться, что все записи правильно прочитаны и доступны?

  3. Каким был этот паркетсекционированная таблица была создана? Я спрашиваю, потому что у меня есть таблица CSV, которую я хотел бы разделить точно так же.

1 Ответ

1 голос
/ 14 октября 2019
  1. Концепция разделения используется в Афине только для ограничения того, какие «каталоги» следует сканировать для данных. Поскольку команда MSCK REPAIR TABLE не выполнена, разделы не созданы. Следовательно, WHERE product_category='Automotive' не оказывает никакого влияния, и я бы сказал, что 3516476 - это общее количество строк во всех файлах csv в s3://amazon-reviews-pds/parquet/.

    Примечание. MSCK REPAIR TABLEбудет работать, только если структура «папок» в AWS S3 соответствует соглашению HIVE:

    s3://amazon-reviews-pds/parquet/
    |
    ├── product_category=Apparel
    │   ├── file_1.csv
    │   | ...
    │   └── file_N.csv
    |                                 
    ├── product_category=Automotive
    │   ├── file_1.csv
    │   | ...
    │   └── file_M.csv
    
  2. Чтобы обеспечить правильное чтение всех записей , необходимо выполнитьубедитесь, что определение таблицы правильное. Чтобы убедиться, что все записи доступны , необходимо убедиться, что LOCATION указывает на корневой «каталог», в котором все файлы расположены на S3.

  3. Если у вас огромный CSV-файл со столбцами col_1, col_2, col_3, col_4 и вы хотите разбить его на col_4, вам нужно будет использовать CTAS операторы запросаоднако имейте в виду ограничения таких операторов.

    В качестве альтернативы, если у вас уже есть несколько файлов CSV, каждый из которых соответствует одному значению из col_4, просто загрузите их вS3 способом, упомянутым выше. Затем вы должны использовать комбинацию следующих операторов DDL:

    -- FIRST STATMENT
    CREATE EXTERNAL TABLE `my_database`.`my_table`(
      `col_1` string, 
      `col_2` string, 
      `col_3` string,
      )
    PARTITIONED BY ( 
      `col_4` string)
    ROW FORMAT SERDE 
      -- CHANGE AS APPROPRIATE
      'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
    STORED AS INPUTFORMAT
      -- CHANGE AS APPROPRIATE 
      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
    OUTPUTFORMAT
      -- CHANGE AS APPROPRIATE 
      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
    LOCATION
      's3://amazon-reviews-pds/parquet/';
    
    -- SECOND STATEMENT
    MSCK REPAIR TABLE `my_database`.`my_table`
    
...