#hive #hdfs #hql
#улей #hdfs #hql
Вопрос:
Итак, у меня возникла эта проблема при добавлении CSV-файла в мой код HQL и запуске его в HDFS. я обнаружил, что при вставке данных он получает нули в частях раздела, а некоторые столбцы удаляются. я перепробовал много разных способов вставки данных, но все равно получаю эти странные символы и потерянные столбцы. похоже, что он не может прочитать файл CSV, вот изображение, введите описание изображения здесь, и вот код `
CREATE database covid_db;
use covid_db;
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions=500;
set hive.exec.max.dynamic.partitions.pernode=500;
CREATE TABLE IF NOT EXISTS covid_db.covid_staging
(
Country STRING,
Total_Cases DOUBLE,
New_Cases DOUBLE,
Total_Deaths DOUBLE,
New_Deaths DOUBLE,
Total_Recovered DOUBLE,
Active_Cases DOUBLE,
Serious DOUBLE,
Tot_Cases DOUBLE,
Deaths DOUBLE,
Total_Tests DOUBLE,
Tests DOUBLE,
CASES_per_Test DOUBLE,
Death_in_Closed_Cases STRING,
Rank_by_Testing_rate DOUBLE,
Rank_by_Death_rate DOUBLE,
Rank_by_Cases_rate DOUBLE,
Rank_by_Death_of_Closed_Cases DOUBLE
)
ROW FORMAT DELIMITED FIELDS TERMINATED by ','
STORED as TEXTFILE
LOCATION '/user/cloudera/ds/COVID_HDFS_LZ'
tblproperties ("skip.header.line.count"="1", "serialization.null.format" = "''");
CREATE EXTERNAL TABLE IF NOT EXISTS covid_db.covid_ds_partitioned
(
Country STRING,
Total_Cases DOUBLE,
New_Cases DOUBLE,
Total_Deaths DOUBLE,
New_Deaths DOUBLE,
Total_Recovered DOUBLE,
Active_Cases DOUBLE,
Serious DOUBLE,
Tot_Cases DOUBLE,
Deaths DOUBLE,
Total_Tests DOUBLE,
Tests DOUBLE,
CASES_per_Test DOUBLE,
Death_in_Closed_Cases STRING,
Rank_by_Testing_rate DOUBLE,
Rank_by_Death_rate DOUBLE,
Rank_by_Cases_rate DOUBLE,
Rank_by_Death_of_Closed_Cases DOUBLE
)
PARTITIONED BY (COUNTRY_NAME STRING)
STORED as TEXTFILE
LOCATION '/user/cloudera/ds/COVID_HDFS_PARTITIONED';
FROM
covid_db.covid_staging
INSERT INTO TABLE covid_db.covid_ds_partitioned PARTITION(COUNTRY_NAME)
SELECT *,Country WHERE Country is not null;
CREATE EXTERNAL TABLE covid_db.covid_final_output
(
TOP_DEATH STRING,
TOP_TEST STRING
)
PARTITIONED BY (COUNTRY_NAME STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED by ','
STORED as TEXTFILE
LOCATION '/user/cloudera/ds/COVID_FINAL_OUTPUT';
`
Ответ №1:
1-й: вы проверяете содержимое файла, и столбец раздела не сохраняется в файле, он сохраняется в метаданных. Также динамически создаваемым разделом являются каталоги в формате ключ = значение. Итак, последний столбец, который вы видите в файле, не является столбцом раздела, это Rank_by_Death_of_Closed_Cases .
2-й: вы не указали разделитель во второй таблице DDL, а также формат NULL. Разделителем по умолчанию является ’01’ (Ctrl-A). Вы можете указать разделитель, например TAB (t) и желаемый NULL:
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 't'
NULL DEFINED AS ''
STORED AS TEXTFILE;
Но лучше не переопределять формат NULL, если вы хотите иметь возможность различать нули и пустые строки.