Как получить схему (столбцы и их типы) файлов ORC, хранящихся в HDFS? - PullRequest
1 голос
/ 08 октября 2019

У меня есть файлы ORC, хранящиеся в разных папках в HDFS следующим образом:

/DATA/UNIVERSITY/DEPT/STUDENT/part-00000.orc
/DATA/UNIVERSITY/DEPT/CREDIT/part-00000.orc

Я не знаю, сколько столбцов присутствует в каждой из этих таблиц (STUDENT, CREDIT и т. Д.),Есть ли способ получить схемы из этих файлов? Я ищу получение имен столбцов и их типов данных, чтобы можно было писать операторы CREATE для таблиц Hive EXTERNAL.

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Команда Hive orc dump решит вашу цель

hive --orcfiledump /DATA/UNIVERSITY/DEPT/STUDENT/part-00000

вы получите столбец, его типы, минимальные, максимальные значения, количество или записи и другие многие другие характеристики, как показано ниже

Rows: 6 .
Compression: ZLIB .
Compression size: 262144 .
Type: struct<_col0:string,_col1:string> .

Stripe Statistics:
Stripe 1:
Column 0: count: 6 .
Column 1: count: 6 min: abc max: mno sum: 17 .
Column 2: count: 6 min: def max: tre sum: 18 .

File Statistics:
Column 0: count: 6 .
Column 1: count: 6 min: abc max: mno sum: 17 .
Column 2: count: 6 min: def max: tre sum: 18 .

Stripes:
Stripe: offset: 3 data: 58 rows: 6 tail: 49 index: 67 .
Stream: column 0 section ROW_INDEX start: 3 length 9 .
Stream: column 1 section ROW_INDEX start: 12 length 29 .
Stream: column 2 section ROW_INDEX start: 41 length 29 .
Stream: column 1 section DATA start: 70 length 20 .
Stream: column 1 section LENGTH start: 90 length 12 .
Stream: column 2 section DATA start: 102 length 21 .
Stream: column 2 section LENGTH start: 123 length 5 .
Encoding column 0: DIRECT .
Encoding column 1: DIRECT_V2 .
Encoding column 2: DIRECT_V2 .
1 голос
/ 09 октября 2019

Нашел способ получить детали (имена столбцов, типы данных), которые я хотел, через Spark

data = sqlContext.sql("SELECT * FROM orc.`<HDFS_path>`");
data.printSchema()

Это напечатает вывод в следующем формате, который является точной информацией, которую я хочу извлечьиз файлов ORC на HDFS:

root
 |-- <column_name1>: <datatype> (nullable = <true/false>)
 |-- <column_name2>: <datatype> (nullable = <true/false>)
 |-- <column_name3>: <datatype> (nullable = <true/false>)
 |-- <column_name4>: <datatype> (nullable = <true/false>)
 |-- <column_name5>: <datatype> (nullable = <true/false>)
...