我需要从与我共享 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;
表位置应该是 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/
如果您在cloudera发行版中使用hive,则必须设置ranger策略以接受此链接中提到的S3 URL - https://docs.cloudera.com/runtime/latest/using-hiveql/topics/hive-创建-s3-based-table.html?