问题描述
我需要从与我共享 url 的公共 s3 存储桶中导入数据。如何将数据加载到hive表中? 我试过下面的命令,但它不起作用:
create external table airlines_info (.... ) row format
delimited fields terminated by '|' lines terminated by '\n'
stored as textfile location 'https://ml-cloud-dataset.....*.txt';
失败:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。 MetaException(消息:ml-cloud-dataset.s3.amazonaws.com/Airlines_data.txt 不是目录或无法创建目录)
我对 hive 很陌生,我不确定代码。在创建表以将数据加载到配置单元表后,我也尝试了下面的代码,但这也不起作用
load data inpath 'https://ml-cloud-dataset.....*.txt' into table airlines_info;
解决方法
表位置应该是 HDFS 或 S3 中的目录,而不是文件和 https 链接。
手动下载文件,放入本地文件系统,如果您已经创建了表,则使用
load data local inpath 'local_path_to_file' into table airlines_info;
如果您还没有该表,请创建它并在您的 S3 中指定某个位置,或者创建管理表(从您的 DDL 中删除 EXTERNAL),如果没有指定位置,它将为您创建位置,使用 DESCRIBE 检查位置FORMATTED 命令,稍后您可以根据需要使用 ALTER TABLE airlines_info SET TBLPROPERTIES('EXTERNAL'='TRUE');
您可以使用 AWS CLI(提供正确的本地路径和表目录 S3 URL)将文件复制到表位置,而不是 load data
命令:
aws s3 cp C:\Users\My_user\Downloads\Airlines_data.txt s3://mybucket/path/airlines_info/