2015-04-01 77 views
0

我正在写一些代码在C#中通过ODBC调用HIVE脚本。我正在使用Hortonworks Hive ODBC驱动程序(尽管我已经尝试了其他几个以及我得到相同的错误)。我可以很好地通过ODBC连接,并且简单的命令可以很好地工作(例如,SELECT * FROM MyTable LIMIT 10;它将完成它应该的工作)。我遇到麻烦的地方是我们有更长的脚本来处理它们有多个“块”的SQL(每个块都以分号结尾)。例如,第一条语句通常创建一个临时表,下一个插入到临时表中,然后可能是另一个表中的另一个选择,等等,典型的SQL。但我不断地收到以下错误指定文件的S3位置的解析器错误的位置:解析器错误与HIVE ODBC

编译语句时出错: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

有趣的皱纹添加。如果我删除上面部分下面的脚本中的所有行(即在LOCATION行后面),它将完美运行。这就像它不喜欢多个陈述,但我不明白为什么。就像我说的那样,如果我从命令行运行它的话。 – bruiseruser 2015-04-01 19:27:07

+0

为了清楚起见,您是否能够在命令行(哪个工具?)的单个查询中运行多个语句,但不能在ODBC驱动程序中运行? – KylePorter 2015-04-02 16:33:13

+0

@KylePorter是的,如果我指向S3中的脚本文件,它工作正常。另外,如果我安排指向脚本文件的EMR步骤,它将完美运行。只有当我尝试通过ODBC驱动程序发送脚本时,脚本才会失败。据我可以告诉它不喜欢脚本中有多个语句的事实,如果我通过ODBC运行单个语句,它似乎表现得如预期。 – bruiseruser 2015-04-02 16:41:27

回答

0

好的,在测试中,hive shell将接受查询中的多个语句。它通过将查询分解为多个单独的语句并将它们作为单独的查询发布给Hive来完成此操作。

ODBC驱动程序目前不支持多语句查询,如果您有兴趣添加该功能,请联系您获得ODBC驱动程序的发行版,或者联系Simba(http://www.simba.com/connectors/apache-hadoop-hive-driver)重新使用Apache发行版,因为它们创建了大多数发行版使用的技术。