Hi,
I have been trying to import an external table to Hive from SQL Server using
Hive generic JDBC Storage handler, but I am seeing the following error, when I
run this command:
CREATE EXTERNAL TABLE Region(
regionid int,
regiondescription string)
STORED BY "org.apache.hive.storage.jdbc.JdbcStorageHandler"
TBLProperties(
"hive.jdbc.driver.class" = "com.ddtek.jdbc.sqlserver.SQLServerDriver",
"hive.jdbc.url"="jdbc:datadirect:sqlserver://<Server>:1433",
"hive.jdbc.username"="*",
"hive.jdbc.password"="*",
"hive.sql.query" = "SELECT REGIONID, REGIONDESCRIPTION FROM
Northwind.dbo.Region",
"hive.sql.column.mapping" = "regionid=REGIONID,
regiondescription=REGIONDESCRIPTION",
"hive.sql.dbcp.maxActive" = "1"
);
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
java.lang.NullPointerException
In the Hive logs, I am seeing this exception:
2017-10-18T13:02:32,735 INFO [12e7d5a1-9951-4bbb-9b01-4781bfdd619d main]
ql.Driver: Executing
command(queryId=hduser_20171018130226_817c0871-bd57-4301-928b-c5cb3a42976c):
CREATE EXTERNAL TABLE Region(
regionid int,
regiondescription string)
STORED BY "org.apache.hive.storage.jdbc.JdbcStorageHandler"
TBLProperties(
"hive.jdbc.driver.class" = "com.ddtek.jdbc.sqlserver.SQLServerDriver",
"hive.jdbc.url"="jdbc:datadirect:sqlserver://10.30.211.140:1433",
"hive.jdbc.username"="datadirect",
"hive.jdbc.password"="datadirect",
"hive.sql.query" = "SELECT REGIONID, REGIONDESCRIPTION FROM
Northwind.dbo.Region",
"hive.sql.column.mapping" = "regionid=REGIONID,
regiondescription=REGIONDESCRIPTION",
"hive.sql.dbcp.maxActive" = "1"
)
2017-10-18T13:02:32,749 INFO [12e7d5a1-9951-4bbb-9b01-4781bfdd619d main]
ql.Driver: Starting task [Stage-0:DDL] in serial mode
2017-10-18T13:02:32,751 INFO [12e7d5a1-9951-4bbb-9b01-4781bfdd619d main]
plan.CreateTableDesc: Use StorageHandler-supplied
org.apache.hive.storage.jdbc.JdbcSerDe for table Region
2017-10-18T13:02:33,452 INFO [12e7d5a1-9951-4bbb-9b01-4781bfdd619d main]
exec.DDLTask: creating table default.Region on null
2017-10-18T13:02:33,556 ERROR [12e7d5a1-9951-4bbb-9b01-4781bfdd619d main]
metadata.Table: Unable to get field from serde:
org.apache.hive.storage.jdbc.JdbcSerDe
java.lang.NullPointerException
at
org.apache.hadoop.hive.metastore.MetaStoreUtils.getFieldsFromDeserializer(MetaStoreUtils.java:1426)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.metadata.Table.getColsInternal(Table.java:641)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.metadata.Table.getCols(Table.java:624)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:831)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:867)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.exec.DDLTask.createTable(DDLTask.java:4356)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:354)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:199)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:100)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:2182)
~[hive-exec-2.3.0.jar:2.3.0]
at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1838)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1525)
~[hive-exec-2.3.0.jar:2.3.0]
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1236)
~[hive-exec-2.3.0.jar:2.3.0]
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1226)
~[hive-exec-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:233)
~[hive-cli-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:184)
~[hive-cli-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)
~[hive-cli-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:821)
~[hive-cli-2.3.0.jar:2.3.0]
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759)
~[hive-cli-2.3.0.jar:2.3.0]
at
org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)
~[hive-cli-2.3.0.jar:2.3.0]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[?:1.7.0_101]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
~[?:1.7.0_101]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[?:1.7.0_101]
at java.lang.reflect.Method.invoke(Method.java:606)
~[?:1.7.0_101]
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
~[hadoop-common-2.7.2.jar:?]
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
~[hadoop-common-2.7.2.jar:?]
2017-10-18T13:02:33,600 ERROR [12e7d5a1-9951-4bbb-9b01-4781bfdd619d main]
exec.DDLTask: org.apache.hadoop.hive.ql.metadata.HiveException:
java.lang.NullPointerException
at
org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:862)
at
org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:867)
at
org.apache.hadoop.hive.ql.exec.DDLTask.createTable(DDLTask.java:4356)
at
org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:354)
at
org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:199)
at
org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:100)
at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:2182)
at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1838)
at
org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1525)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1236)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1226)
at
org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:233)
at
org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:184)
at
org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)
at
org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:821)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.NullPointerException
at
org.apache.hadoop.hive.metastore.MetaStoreUtils.getFieldsFromDeserializer(MetaStoreUtils.java:1426)
at
org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:832)
... 22 more
Can anyone please let me know what am I missing or doing incorrectly? Also, I
was not able to find any documentation for JDBC Storage Handler, all the
information I got about using this was from
https://issues.apache.org/jira/browse/HIVE-1555 and
https://github.com/apache/hive/commit/12b27a355558499f6422e49742bd5cad71416fb2#diff-4ab2f71883a411645591e2831b67af8b.
If there is any documentation, can anyone please point me to that?
Thanks,
Sai