testbook

导入数据:LOAD

LOAD语句将文件中的数据导入已创建的表。导入操作仅仅将数据文复制或移动到表或分区所对应的地址中,Inceptor不会在LOAD时对数据进行任何处理。
语法

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
说明

  • filepath(文件路径)是存放数据文件的地址。如果不加上LOCAL关键字,filepath是HDFS上的路径。HDFS上的路径可以是:
    • 相对路径,比如project/datafile1
    • 绝对路径,比如/user/hive/project/datafile1
    • 有scheme和authority(可选)完整的URI,比如 hdfs://namenode:8000/inceptor_id/user/hive/project/datafile1
    Inceptor会遵循以下规则:
    • 如果filepath是一个完整的URI,Inceptor会使用这个完整的URI
    • 如果不指明scheme和authority,Inceptor会用指定namdenode URL的hadoop配置变量 fs.default.name中的scheme和authority。(Hive will use the scheme and authority from the hadoop configuration variable fs.default.name that specifies the Namenode URI.)
    • 如果filepath不是绝对的,Inceptor会认为是相对于/user/username的。Inceptor会将filepath指定的文件移入指定的表或者分区中。
  • 如果加上了LOCAL选项,LOAD命令会在本地文件系统中查找文件路径。如果filepath是一个相对路径,那Inceptor会将它理解为相对用户当前的工作目录的路径。filepath也可以是本地文件的完整URI,例如:file:///user/hive/project/data1。Inceptor会根据表的地址属性判断目标文件系统,LOAD命令会将filepath指定的所有文件复制到目标文件系统中,这些文件然后就会被移入表内。
  • filepath可以指向一个文件也可以指向一个目录。当它指向一个文件时,Inceptor会将文件移入表内。当它指向一个目录时,Inceptor会将目录下所有的文件移入表内。
  • 被导入数据的目标可以是一张表或者一个分区。如果表是分区表,导入数据时必须使用 [PARTITION (partcol1=val1, partcol2=val2...)]来指明目标分区。
  • 如果加上了OVERWRITE选项,那目标表或者分区已有的内容会被导入的文件覆盖;如果不加OVERWRITE选项,导入的文件不覆盖已有文件。但是如果目标表或者分区中存在文件和被导入的文件重名,那么原先的文件会被新文件覆盖。

  • 注意: filepath不可以有子目录。

    举例
  • 将本地数据导入表:
    [$host] transwarp> LOAD DATA LOCAL INPATH '/tmp/user_info_table.txt' INTO TABLE user_info;
    
  • 将本地数据导入分区表下的一个分区:
    [$host] transwap> LOAD DATA LOCAL INPATH '/tmp/user_info_table_A.txt' INTO TABLE partition_user_info PARTITION (acc_level = 'A');
    
  • 将HDFS数据导入表:
    [$host]transwarp>  LOAD DATA INPATH '/user/root/test' INTO TABLE user_info2;