云对象存储
全量数据导入
下面例子使用 SQL 将华为云的student.csv文件载入到student表或student卷。
COPY INTO student FROM 'obs://example_bucket/student.csv'
WITH CREDENTIALS (ACCESS_KEY='access_key', SECRET_KEY='secret_key', SECURITY_TOKEN='security_token',ENDPOINT='endpoint')
FORMAT=csv ('header'='true', 'delimiter'=',');
湖仓会根据student的类型(表或卷)来确定载入数据存储方式。对于多个源文件的情况,可以使用逗号分开,例如
'obs://example_bucket/student.csv,oss://example_bucket2/student2.csv'
也可以通过 Scala, Java 或 Python 脚本将指定的一组云对象存储文件数据导入,例如下面的脚本实现了相同的功能
val credentials = Map[String, String]("ACCESS_KEY"->"access_key", "SECRET_KEY"->"secret_key", "SECURITY_TOKEN"->"security_token","ENDPOINT"->"endpoint")
val sources = Array[String]("obs://example_bucket/student.csv")
spark.tables.copyInto("student", sources, credential)
可以在指定路径后加 * 将该路径下所有文件载入到指定的表/卷。也可以在指定路径后加 *.后缀 在选择特定后缀或类型的文件。例如:
COPY INTO student FROM 'obs://example_bucket/student/*' ...
COPY INTO student FROM 'obs://example_bucket/student/*.csv' ...
关于使用 COPY INTO 导入数据请参阅:
关于使用 copyInto 函数导入数据请参阅:
增量数据导入
可以使用 STREAMING 标志来获取指定路径下的增量文件数据。例如载入 obs://example_bucket/student 文件夹中的新增的csv文件:
COPY INTO student FROM STREAMING 'obs://example_bucket/student/*.csv' ...
目前云对象存储增量数据导入仅支持指定路径下文件路径按照顺序单调增加的情况 (即新增的文件路径按照字典顺序 > 之前的文件路径)。 首次执行该命令会将指定文件夹下的所有指定类型的文件导入,后面执行该命令会将指定文件夹下的新增文件导入。
连接到云对象存储
可以直接读取云对象存储的数据:
spark.read.format("csv").load("obs://example_bucket/student.csv")
必须配置对云对象存储的访问权限才能使用路径查询数据。 请参阅配置对云对象存储的访问权限。