Сохранятся ли ограничения после импорта таблицы из RDBMS в HIVE с помощью sqoop? - PullRequest
1 голос
/ 15 марта 2019

Когда мы используем sqoop import для передачи таблицы RDBMS в HIVE, сохранятся ли ограничения таблицы, такие как первичный ключ ?

т.е. останется ли столбец таблицы, который является первичным ключом 1009 *, первичным ключом в HIVE. Будет ли эта информация в улей метастор?

Большое спасибо.

1 Ответ

0 голосов
/ 16 марта 2019

Как вы можете видеть в ссылке на официальную документацию Hive QL ниже, ограничения PRIMARY и FOREIGN были добавлены после Hive версии 2.1.0. Hive QL

Hive 2.1.0 Changes

Итак, я предполагаю, что ограничения PRIMARY и FOREIGN Keys сохранятся при импорте таблиц в Hive с использованием sqoop.

Я протестировал sqoop импорт базы данных MySQL и вижу, что PRIMARY KEY CONSTRAINT не поддерживается во время импорта.

Формат таблицы MySQL:

    mysql> show create table employees;
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                                                                                                                   |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| employees | CREATE TABLE `employees` (
  `emp_no` int(11) NOT NULL,
  `birth_date` date NOT NULL,
  `first_name` varchar(14) NOT NULL,
  `last_name` varchar(16) NOT NULL,
  `gender` enum('M','F') NOT NULL,
  `hire_date` date NOT NULL,
  PRIMARY KEY (`emp_no`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

Данные были импортированы из MySQL в Hive с помощью следующей команды:

sqoop import --connect jdbc:mysql://localhost/employees --username root --password password --table employees --hive-import --create-hive-table --hive-table employees

Когда я описываю таблицу в улье, я не вижу ОСНОВНОЕ КЛЮЧЕВОЕ ОГРАНИЧЕНИЕ

hive> show create table employees;
OK
CREATE TABLE `employees`(
  `emp_no` int, 
  `birth_date` string, 
  `first_name` string, 
  `last_name` string, 
  `gender` string, 
  `hire_date` string)
COMMENT 'Imported by sqoop on 2019/03/18 00:24:11'
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'='', 
  'line.delim'='\n', 
  'serialization.format'='') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://localhost:9000/user/hive/warehouse/employees'
TBLPROPERTIES (
  'transient_lastDdlTime'='1552865076')
Time taken: 1.304 seconds, Fetched: 22 row(s)

Я вставил новую строку с тем же номером сотрудника, чтобы проверить, управляет ли Hive PK Constraint. Новая строка была добавлена, как вы можете видеть:

hive> insert into employees values (10001, "1986-04-17", "Hichem", 
"BOUSSETTA", "M", "2014-09-91");
Moving data to directory hdfs://localhost:9000/user/hive/warehouse/employees/.hive-staging_hive_2019-03-18_00-32-16_851_8569619447966100947-1/-ext-10000
Loading data to table default.employees
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1   Cumulative CPU: 5.79 sec   HDFS Read: 5080 HDFS Write: 120 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 790 msec
OK
Time taken: 42.422 seconds
hive> select * from employees;
OK
10001   1986-04-17  Hichem  BOUSSETTA   M   2014-09-91
10001   1953-09-02  Georgi  Facello M   1986-06-26
10002   1964-06-02  Bezalel Simmel  F   1985-11-21

Итак, подытожим: Sqoop не сохраняет ограничения PK при импорте данных RDBMS в Hive

...