Почему основная таблица и временная таблица дают разные результаты? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть одна временная внешняя таблица, и я поместил данные из HDFS в эту таблицу. Теперь я вставляю те же данные в основную внешнюю таблицу моего раздела. Данные вставляются успешно, но когда я запрашиваю основную таблицу, используя столбцы, я получаю разные значения для столбцов.

Я загрузил данные, используя CSV-файл, во временное хранилище, содержащее четыре поля.

col1=id
col2=visitDate
col3=comment
col4=age

Ниже приведены запросы и их результаты:

Временная таблица:

create external table IF NOT EXISTS  dummy1(id string,visitDate string,comment string, age string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
;

MAIN Table:

create external table IF NOT EXISTS  dummy1(id string,comment string)
PARTITIONED BY (visitDate string, age string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC
;


Result:

Temporary table:

select *from incr_dummy1;

1       11      a       20
2       12      b       3
1       13      c       34
4       14      d       23
5       15      e       45
6       16      f       65
7       17      g       78
8       18      h       9
9       19      i       12
10      20      j       34

select visitDate,age from incr_dummy1;

11      20
12      3
13      34
14      23
15      45
16      65
17      78
18      9
19      12
20      34


Main Table:

select *from dummy1;

1       11      a       20
2       12      b       3
1       13      c       34
4       14      d       23
5       15      e       45
6       16      f       65
7       17      g       78
8       18      h       9
9       19      i       12
10      20      j       34

select visitDate,age from dummy1;

a       20
b       3
c       34
d       23
e       45
f       65
g       78
h       9
i       12
j       34

так что в приведенной выше основной внешней таблице значение столбца "comment" прибывает, когда я запрашиваю столбец "visitDate".

Пожалуйста, дайте мне знать, какую ошибку я здесь делаю?

1 Ответ

1 голос
/ 11 апреля 2019

Как я могу видеть, порядки столбцов not same in temporary and final tables.

При вставке данных из Temporary table to final table проверьте правильность порядка столбцов в select statement(partition cols needs to be at the end of select cols).

hive> insert into dummy1 partition(visitDate,age) select id,comment,visitDate,age from incr_dummy1;

На всякий случай, если у вас все еще есть проблемы, лучше проверить

  • Поскольку у вас есть внешняя многораздельная таблица (когда мы удаляем таблицу, данные не будут удалены в HDFS), check the hdfs directory есть ли дополнительные файлы, которые не были удалены.

  • Затем drop the table, delete the hdfs directory и create the table then run your job again.


Обновление:

Option1:

можно ли соответствовать порядку столбцов в temporary table with final table, если да, изменить порядок столбцов.

Option2:

используйте subquery with quoted identifier, чтобы исключить исходные столбцы и получить только столбцы псевдонимов в нашем окончательном запросе выбора .

hive> set hive.support.quoted.identifiers=none;
hive> insert into dummy1 partition(visitDate,age)
      select `(visitDate|age)?+.+` from --exlude visitDate,age columns. 
     (select *,visitDate vis_dat,age age_n from incr_dummy1)t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...