无法将天蓝色Blob文件加载到HDINSIGHT中的Hive表中

时间:2015-02-25 18:35:29

标签: azure hadoop hive hiveql hdinsight

我是新的Hadoop,我将自己陷入了将单个blob文件数据加载到hive表中的基本问题之一。我正在根据文件名emp.dat创建表。

CREATE EXTERNAL TABLE Employee(ID int, manager string,Code int,Name string, Year int, Month int, Salary int,Age int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION 'wasb://practice@XXXblobstore.blob.core.windows.net/emp.dat/'

当我执行上述命令时,我收到以下错误:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
MetaException(message:Got exception: java.io.IOException
Cannot create directory wasb://practice@XXXblobstore.blob.core.windows.net/emp.dat/

我还尝试了一种不同的方法来创建没有任何isb位置的表。然后,运行以下命令:

LOAD data inpath 'wasb://practice@XXXblobstore.blob.core.windows.net/emp.dat/' overwrite into table Employee 

它会在wasb url处抛出错误的sytax错误。

请帮我解决这个问题。是否强制使用目录而不是文件名。是否可以通过仅提供文件名来创建外部表。

我的另一个条件是:如果我们提供目录名称并且它包含2个不同模式的文件..它如何将所有文件数据加载到表中。

是否可以从hive命令更改默认容器

2 个答案:

答案 0 :(得分:1)

我认为以下应该可以工作(只要你在这个emp目录中有emp.dat)

CREATE EXTERNAL TABLE Employee
(
    ID      INT,
    Manager STRING,
    Code    INT,
    Name    STRING,
    Year    INT,
    Month   INT,
    Salary  DOUBLE,
    Age     INT
)
ROW FORMAT
    DELIMITED
    FIELDS           TERMINATED BY '\t'
LOCATION 'wasb://practice@XXXblobstore.blob.core.windows.net/user/emp'
;

答案 1 :(得分:0)

是的,我终于找到了将文件数据加载到hive表的方法 LOAD DATA INPATH'wasb:///tempdata/emp.dat'OVERWRITE INTO Employee;

这仅适用于Default容器,因为如果容器不同,即使它们属于同一存储帐户,URI的权限部分也不匹配。请参阅以下网址

https://social.msdn.microsoft.com/forums/azure/en-US/22cf9a71-cce7-4765-a78e-2dc569d69a8a/hive-path-is-not-legal-azure-storage?forum=hdinsight