使用 sqoop 将表从 RDBMS 导入 HIVE 后约束是不是仍然存在?

     2023-04-18     194

关键词:

【中文标题】使用 sqoop 将表从 RDBMS 导入 HIVE 后约束是不是仍然存在?【英文标题】:Will the constraints remain after Importing table from RDBMS to HIVE with sqoop?使用 sqoop 将表从 RDBMS 导入 HIVE 后约束是否仍然存在? 【发布时间】:2019-03-15 16:07:23 【问题描述】:

当我们使用sqoop import将RDBMS表传输到HIVE时,表的主键约束会保留吗?

即作为 主键 的表的列是否会在 HIVE 处保留为主键。这些信息会在 Hive 元存储中吗?

非常感谢。

【问题讨论】:

【参考方案1】:

正如您在下面的 Hive QL 官方文档链接中看到的那样,自 Hive 版本 2.1.0 以来已添加 PRIMARY 和 FOREIGN 约束。 Hive QL

因此,我假设当您使用 sqoop 将表导入 Hive 时,PRIMARY 和 FOREIGN Keys 约束将保留。

我测试了一个 MySQL 数据库的 sqoop 导入,我可以看到 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 中描述表时,我看不到 PRIMARY KEY CONSTRAINT

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 约束。如您所见,新行已添加:

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 在将 RDBMS 数据导入 Hive 时不保留 PK 约束

【讨论】:

我认为这些约束适用于通过 HIVE shell-command 创建表时。如您所见,它适用于 HIVE DDL 语句。请在验证后告诉我。 是的,没错。我明天检查一下。预计 Hive 将越来越符合标准 sql。所以,我认为用 rdbms 同步数据时它很有可能会起作用 @eMazarakis 我今天做了测试,发现 sqoop 没有导入主键约束。我会更新我的第一个答案

Sqoop - 使用 Avro 格式将表从 Oracle 导入 Hive 的最佳选择是啥?

】Sqoop-使用Avro格式将表从Oracle导入Hive的最佳选择是啥?【英文标题】:Sqoop-WhatisthebestoptiontoimportatablefromOracletoHiveusingtheAvroformat?Sqoop-使用Avro格式将表从Oracle导入Hive的最佳选择是什么?【发布时间】:2017-03-0811:49:53【问题描述】... 查看详情

使用 Sqoop 将表从 AWS RDS 移动到 AWS EMR 的问题

】使用Sqoop将表从AWSRDS移动到AWSEMR的问题【英文标题】:IssuewithmovingatablefromAWSRDStoAWSEMRusingSqoop【发布时间】:2020-04-0507:54:03【问题描述】:我有一个使用postgres的带有单个表的AWSRDS数据库。现在我想将我的数据移动到AWSEMR,以便... 查看详情

如何使用 Java 将表从 MySQL 导入 Hive?

】如何使用Java将表从MySQL导入Hive?【英文标题】:HowtoimporttablefromMySQLtoHiveusingJava?【发布时间】:2014-03-1818:14:49【问题描述】:我正在尝试将表从MySQL导入Hive。但是,我收到以下错误,请您提供解决方案吗?SqoopOptions正在加载...... 查看详情

使用 SQOOP 从 RDBMS 导入数据

】使用SQOOP从RDBMS导入数据【英文标题】:ImportingdatafromRDBMSusingSQOOP【发布时间】:2016-07-1210:36:14【问题描述】:我正在尝试将数据从SQL服务器数据库导入Hive。基本上我将整个数据库(除了一些表)导入Hive。在这里,我有一些我... 查看详情

无法使用 Sqoop 将数据从 Vertica 导入 Cassandra

】无法使用Sqoop将数据从Vertica导入Cassandra【英文标题】:UnabletoimportdatafromVerticatoCassandrausingSqoop【发布时间】:2014-10-3014:53:49【问题描述】:我正在尝试使用Sqoop将表从Vertica导入DataStaxEnterprise4.5。没有报错也没有异常,但是目标... 查看详情

在 RDBMS 中没有主键的 Sqoop 导入

...nRDBMS【发布时间】:2015-03-1906:34:01【问题描述】:我可以使用sqoop将RDBMS表数据(表没有主键)导入到hive吗?如果是的话,请给sqoop导入命令。我尝试过使用sqoopimportgeneral命令,但失败了。【问题讨论】:【参考方案1】:如果您... 查看详情

错误:使用 Sqoop 将所有表从 MariaDB 导入 Hive 数据库时文件路径无效

】错误:使用Sqoop将所有表从MariaDB导入Hive数据库时文件路径无效【英文标题】:Error:InvalidfilepathwhileimportingalltablesfromMariaDBtoHiveDatabaseusingSqoop【发布时间】:2020-09-2409:59:07【问题描述】:这是我使用sqoop的导入命令:sqoopimport-all-t... 查看详情

如何使用 Sqoop 从 RDBMS 将数据导入本地文件系统,而不是 HDFS?

】如何使用Sqoop从RDBMS将数据导入本地文件系统,而不是HDFS?【英文标题】:HowtoimportdatausingSqoopfromRDBMSintolocalfilesystem,notHDFS?【发布时间】:2014-11-1918:42:35【问题描述】:我看到Sqoop允许将数据从RDBMS数据库导入HDFS。但是,我想将... 查看详情

sqoop配置安装以及导入

...验证启动  Sqoop的数据导入“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据) 语法下面的语法 查看详情

在 sqoop 中从 RDBMS 导入选定的表

...个数据库中有1000个表,那么我只想导入500个表。我可以使用--exclude-tables,但我无法在命令行中输入所有500个表名来排除。请建议我,如何实现它?【问题讨论】 查看详情

我可以使用 Sqoop 将数据从 SQL Server 导入 Azure Blob 存储吗

】我可以使用Sqoop将数据从SQLServer导入AzureBlob存储吗【英文标题】:CanIuseSqooptoimportdatafromSQLServertoAzureblobstorage【发布时间】:2017-08-2514:50:51【问题描述】:我们是否可以使用Sqoop实用程序以.parquet文件格式将表从SQLServer数据库导... 查看详情

使用 Sqoop 将数据从 RDBMS 导入 Hive 时,如何在命令行中指定 Hive 数据库名称?

】使用Sqoop将数据从RDBMS导入Hive时,如何在命令行中指定Hive数据库名称?【英文标题】:HowtospecifyHivedatabasenameincommandlinewhileimportingdatafromRDBMSintoHiveusingSqoop?【发布时间】:2013-01-2512:20:49【问题描述】:我需要将数据从RDBMS表导入... 查看详情

将表从 Postgres 导入 MS Access 并丢失记录

】将表从Postgres导入MSAccess并丢失记录【英文标题】:ImportingtablefromPostgrestoMSAccessandlosingrecords【发布时间】:2017-12-1411:16:54【问题描述】:我有一个包含近700,000条记录的postgres表,我将该表导入MS访问(通过ODBC数据源),最终只... 查看详情

使用 Sqoop 将数据附加到配置单元表

】使用Sqoop将数据附加到配置单元表【英文标题】:AppendingDatatohiveTableusingSqoop【发布时间】:2014-01-0812:32:34【问题描述】:我正在尝试将数据附加到hive中已经存在的表。首先使用以下命令将表从MS-SQLServer导入到hive。Sqoop命令:sq... 查看详情

sqoop1与sqoop2

...oop1Sqoop2用于所有主要RDBMS的连接器支持不支持解决办法:使用已在以下数据库上执行测试的通用JDBC连接器:MicrosoftSQLServer、PostgreSQL、MySQL和Oracle。 此连接器应在任何其它符合JDBC要求的数据库上运行。但是,性能可能无法与S... 查看详情

将表从数据库导出到 csv 文件

...想:将表从sqlserver数据库导出到逗号分隔的csv文件,而不使用sqlServer导入导出向导我想使用查询来完成,因为我想在自动化中使用查询有可能吗?我搜索了一下,没有找到好的答案【问题讨论】:是的,有可能,您可以使用C#、p... 查看详情

Sqoop - 错误工具.ImportTool:导入失败:尝试从 SQL Server 导入时无法转换 SQL 类型 2005

...【发布时间】:2018-09-0514:19:19【问题描述】:我正在尝试使用Sqoop将表从SQL服务器导入Hive。以下 查看详情

将表从 Dev DB 复制到 QA DB

...【发布时间】:2021-09-1611:55:55【问题描述】:我正在尝试使用导入/导出向导将表从开发数据库复制到SQLServer中的QA数据库。大约有660万行,大约需要7个小时才能完成。有没有更快的方法来完成任务?下面是我正在使用的代码:SE... 查看详情