Невозможно запросить / выбрать данные, вставленные через Spark SQL

Я пытаюсь вставить данные в таблицу Hive Managed с разделом.

Показать вывод создания таблицы для справки.

+--------------------------------------------------------------------------------------------------+--+
|                                          createtab_stmt                                          |
+--------------------------------------------------------------------------------------------------+--+
| CREATE TABLE `part_test08`(                                                                      |
|   `id` string,                                                                                   |
|   `name` string,                                                                                 |
|   `baseamount` double,                                                                           |
|   `billtoaccid` string,                                                                          |
|   `extendedamount` double,                                                                       |
|   `netamount` decimal(19,5),                                                                     |
|   `netunitamount` decimal(19,5),                                                                 |
|   `pricingdate` timestamp,                                                                       |
|   `quantity` int,                                                                                |
|   `invoiceid` string,                                                                            |
|   `shiptoaccid` string,                                                                          |
|   `soldtoaccid` string,                                                                          |
|   `ingested_on` timestamp,                                                                       |
|   `external_id` string)                                                                          |
| PARTITIONED BY (                                                                                 |
|   `productid` string)                                                                            |
| ROW FORMAT SERDE                                                                                 |
|   'org.apache.hadoop.hive.ql.io.orc.OrcSerde'                                                    |
| STORED AS INPUTFORMAT                                                                            |
|   'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'                                              |
| OUTPUTFORMAT                                                                                     |
|   'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'                                             |
| LOCATION                                                                                         |
|   'wasb://blobrootpath/hive/warehouse/db_103.db/part_test08'  |
| TBLPROPERTIES (                                                                                  |
|   'bucketing_version'='2',                                                                       |
|   'transactional'='true',                                                                        |
|   'transactional_properties'='default',                                                          |
|   'transient_lastDdlTime'='1549962363')                                                          |
+--------------------------------------------------------------------------------------------------+--+

Попытка выполнить оператор SQL для вставки записей в таблицу деталей, как показано ниже

sparkSession.sql("INSERT INTO TABLE db_103.part_test08 PARTITION(ProductId) SELECT reflect('java.util.UUID', 'randomUUID'),stg_name,stg_baseamount,stg_billtoaccid,stg_extendedamount,stg_netamount,stg_netunitamount,stg_pricingdate,stg_quantity,stg_invoiceid,stg_shiptoaccid,stg_soldtoaccid,'2019-02-12 09:06:07.566',stg_id,stg_ProductId FROM tmp_table WHERE part_id IS NULL");

Без оператора вставки, если мы запустим запрос выбора, получим данные ниже.

+-----------------------------------+--------+--------------+--------------------+------------------+-------------+-----------------+-------------------+------------+-------------+--------------------+--------------------+-----------------------+------+-------------+
|reflect(java.util.UUID, randomUUID)|stg_name|stg_baseamount|     stg_billtoaccid|stg_extendedamount|stg_netamount|stg_netunitamount|    stg_pricingdate|stg_quantity|stg_invoiceid|     stg_shiptoaccid|     stg_soldtoaccid|2019-02-12 09:06:07.566|stg_id|stg_ProductId|
+-----------------------------------+--------+--------------+--------------------+------------------+-------------+-----------------+-------------------+------------+-------------+--------------------+--------------------+-----------------------+------+-------------+
|               4e0b4331-b551-42d...|    OLI6|          16.0|2DD4E682-6B4F-E81...|            34.567|   1166.74380|        916.78000|2018-10-18 05:06:22|          13|           I1|2DD4E682-6B4F-E81...|2DD4E682-6B4F-E81...|   2019-02-12 09:06:...|     6|           P3|
|               8b327a8e-dd3c-445...|    OLI7|          16.0|2DD4E682-6B4F-E81...|            34.567|    766.74380|       1016.78000|2018-10-18 05:06:22|          13|           I6|2DD4E682-6B4F-E81...|2DD4E682-6B4F-E81...|   2019-02-12 09:06:...|     7|           P4|
|               c0e14b9a-8d1a-426...|    OLI5|       14.6555|                null|             34.56|    500.87000|        814.65000|2018-10-11 05:06:22|          45|           I4|29B73C4E-846B-E71...|29B73C4E-846B-E71...|   2019-02-12 09:06:...|     5|           P1|
+-----------------------------------+--------+--------------+--------------------+------------------+-------------+-----------------+-------------------+------------+-------------+--------------------+--------------------+-----------------------+------+-------------+

Раньше я получал ошибку при вставке в управляемую таблицу. Но после перезапуска сервисов Hive & Thrift теперь нет ошибок при выполнении задания, но не удается увидеть эти вставленные данные при выполнении запроса выбора через beeline / program. Я вижу, что раздел с дельта-файлами также был вставлен в улей / склад, см. снимок экрана ниже. введите здесь описание изображения

Кроме того, я вижу некоторые предупреждения, как показано ниже, не уверен, что это связано с ошибкой или нет.

Cannot get ACID state for db_103.part_test08 from null

Еще одно замечание: Если я использую внешнюю таблицу, она работает нормально, может также просматривать данные.

Мы используем кластер Azure HDInsight Spark 2.3 (предварительная версия HDI 4.0) с указанными ниже стеками служб.

HDFS: 3.1.1

Улей: 3.1.0

Spark2: 2.3.1


person rajusem    schedule 12.02.2019    source источник


Ответы (1)


Вы добавили ниже установленные команды при попытке вставить данные.

SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
SET hive.support.concurrency=true;
SET hive.enforce.bucketing=true;
SET hive.exec.dynamic.partition.mode=nonstrict;

Я столкнулся с аналогичной проблемой, когда мне не разрешалось выполнять какие-либо операции чтения / записи, после добавления вышеуказанных свойств я смог запросить таблицу.

Поскольку вы не сталкивались с какими-либо проблемами с внешней таблицей, не уверен, что это решит вашу проблему.

person Vijiy    schedule 12.02.2019
comment
Спасибо за предложение, я пробовал то же самое, но это не помогло. - person rajusem; 13.02.2019
comment
После перезапуска Hive / Thrift сервисы теперь не получают ошибку, но не могут видеть вставленные данные через beeline / program. обновленный вопрос для того же. - person rajusem; 13.02.2019