我正在用C#编写一些代码来通过ODBC调用HIVE脚本。我正在使用Hortonworks Hive ODBC驱动程序(虽然我也尝试了其他几个,但我得到了同样的错误)。我可以通过ODBC连接正常,简单的命令工作得很好(例如SELECT * FROM MyTable LIMIT 10;将完全按照它应该做的)。我遇到麻烦的地方是我们有更长的脚本来处理它们有多个“块”的SQL(每个都用分号结尾)。因此,例如,第一个语句通常会创建一个临时表,下一个插入它,然后可能是另一个表中的另一个选择,等等,典型的SQL。但是我一直在指定具有解析器错误的文件的S3位置的行上收到以下错误:
编译语句时出错:FAILED:ParseException 8:85错过了';'的EOF靠近''s3n:// somebucket / somefolder / etc'
这是一个失败的例子:
CREATE EXTERNAL TABLE IF NOT EXISTS mytesttable(
id int,
anotherid int,
name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
LOCATION 's3n://somebucket/somefolder/etc';
...script continues here with the next chunk of SQL
我做错了什么? 此外,如果我在SSH中输入并从命令行运行此脚本,它将完美运行。
答案 0 :(得分:0)
好的,在测试中,hive shell将接受查询中的多个语句。它通过将查询分解为多个单独的语句并将它们作为单独的查询发布到Hive来实现此目的。
ODBC驱动程序目前不支持多语句查询,如果您对添加该功能感兴趣,则应联系您从ODBC驱动程序获得的分发,或者您可以联系Simba({{3}如果您正在使用Apache发行版,因为它们创建了大多数发行版使用的技术。