如何将特定模式的数据从 SQL Server 2014 (Unicode) 导入 Hive 仓库
How to import data into Hive warehouse from SQL Server 2014 (Unicode) for specific schema
我想从 SQL 服务器导入数据并从 hive 查询它。
我使用 cloudera 模板创建了一个 VirtualBox,并开始阅读它的教程。
我成功地能够使用 sqoop 作为 avro 文件从 SQL 服务器导入数据,然后在配置单元中创建 table 并从 avro 文件导入数据。然后从hive中查询。
但是 sqoop 的 import-all-tables 命令只导入模式 "dbo" 的 table。
如果我还想导入带有架构 dw
的 table 怎么办?我尝试使用导入命令导入 dw
模式中存在的特定 table。但这也行不通。
知道如何使用 sqoop 从 SQL 服务器导入数据作为 avro 用于非 dbo.
模式相关的 tables 吗?或者从 SQL 服务器导入数据而不是 dbo.
模式并将其直接加载到配置单元中?
下载JDBC驱动并复制到sqoop目录
$ curl -L 'http://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_4.0.2206.100_enu.tar.gz' | tar xz
$ sudo cp sqljdbc_4.0/enu/sqljdbc4.jar /var/lib/sqoop/
使用 sqoop
从 Sql 服务器导入 table
sqoop import --driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" --connect="jdbc:sqlserver://sqlserver;database=databasename;username=username;password=passwordofuserprovidedinusername" --username=username --password= passwordofuserprovidedinusername --table="schemaname.tablename" --split-by=primarykeyoftable --compression-codec=snappy --as-avrodatafile --warehouse-dir=/user/hive/warehouse/tablename
验证 table 是否正确导入
hadoop fs -ls /user/hive/warehouse
ls -l *.avsc
创建新目录并提供适当的权限
sudo -u hdfs hadoop fs -mkdir /user/examples
sudo -u hdfs hadoop fs -chmod +rw /user/examples
hadoop fs -copyFromLocal ~/*.avsc /user/examples
启动配置单元
hive
从sqoop导入table schema和数据到hive仓库
CREATE EXTERNAL TABLE tablename
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'hdfs:///user/hive/warehouse/tablename’
TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_schemaname_tablename.avsc');
注意: 确保在键入命令时,如果您正在处理命令,单引号可能会改变。路径或文件名中不应有任何 space。
我想从 SQL 服务器导入数据并从 hive 查询它。
我使用 cloudera 模板创建了一个 VirtualBox,并开始阅读它的教程。
我成功地能够使用 sqoop 作为 avro 文件从 SQL 服务器导入数据,然后在配置单元中创建 table 并从 avro 文件导入数据。然后从hive中查询。
但是 sqoop 的 import-all-tables 命令只导入模式 "dbo" 的 table。
如果我还想导入带有架构 dw
的 table 怎么办?我尝试使用导入命令导入 dw
模式中存在的特定 table。但这也行不通。
知道如何使用 sqoop 从 SQL 服务器导入数据作为 avro 用于非 dbo.
模式相关的 tables 吗?或者从 SQL 服务器导入数据而不是 dbo.
模式并将其直接加载到配置单元中?
下载JDBC驱动并复制到sqoop目录
$ curl -L 'http://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_4.0.2206.100_enu.tar.gz' | tar xz
$ sudo cp sqljdbc_4.0/enu/sqljdbc4.jar /var/lib/sqoop/
使用 sqoop
从 Sql 服务器导入 tablesqoop import --driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" --connect="jdbc:sqlserver://sqlserver;database=databasename;username=username;password=passwordofuserprovidedinusername" --username=username --password= passwordofuserprovidedinusername --table="schemaname.tablename" --split-by=primarykeyoftable --compression-codec=snappy --as-avrodatafile --warehouse-dir=/user/hive/warehouse/tablename
验证 table 是否正确导入
hadoop fs -ls /user/hive/warehouse
ls -l *.avsc
创建新目录并提供适当的权限
sudo -u hdfs hadoop fs -mkdir /user/examples
sudo -u hdfs hadoop fs -chmod +rw /user/examples
hadoop fs -copyFromLocal ~/*.avsc /user/examples
启动配置单元
hive
从sqoop导入table schema和数据到hive仓库
CREATE EXTERNAL TABLE tablename
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'hdfs:///user/hive/warehouse/tablename’
TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_schemaname_tablename.avsc');
注意: 确保在键入命令时,如果您正在处理命令,单引号可能会改变。路径或文件名中不应有任何 space。