从外部s3存储桶url链接将数据导入到hive表中

问题描述 投票:0回答:2

我需要从与我共享 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';

FAILED:执行错误,从 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;
amazon-s3 hive create-table hiveddl
2个回答
0
投票

表位置应该是 HDFS 或 S3 中的目录,而不是文件,也不是 https 链接。

手动下载文件,放入本地文件系统,如果您已经创建了表,则使用

load data local inpath  'local_path_to_file' into table airlines_info;

如果您还没有该表,请创建它并指定 S3 内的某个位置,或者创建 MANAGED 表(从 DDL 中删除 EXTERNAL),如果没有指定位置,它将为您创建位置,使用 DESCRIBE FORMATTED 命令检查位置,稍后您可以根据需要使用

ALTER TABLE airlines_info SET TBLPROPERTIES('EXTERNAL'='TRUE');

将表转换为 EXTERNAL

您可以使用 AWS CLI 将文件复制到表位置(提供正确的本地路径和表目录 S3 URL),而不是使用

load data
命令:

aws s3 cp C:\Users\My_user\Downloads\Airlines_data.txt s3://mybucket/path/airlines_info/

0
投票

如果您在cloudera发行版中使用hive,则必须设置ranger策略以接受此链接中提到的S3 URL - https://docs.cloudera.com/runtime/latest/using-hiveql/topics/hive-创建-s3-based-table.html?

© www.soinside.com 2019 - 2024. All rights reserved.