CREATE LOCATION
创建可供 Vertica 存储数据的存储位置。创建该位置后,可以在其中存储策略,以将该存储位置分配给将在此位置存储数据的数据库对象。
当心
如果没有技术问题阻止您使用 CREATE LOCATION
添加一个或多个网络文件系统 (NFS) 存储位置,则 Vertica 不支持 NFS 数据或编录存储,MapR 挂载点除外。您将无法对任何其他 NFS 数据运行查询。在 MapR 文件系统上创建位置时,您必须指定 ALL NODES SHARED
。
如果您使用 HDFS 存储位置,则在启动 Vertica 时 HDFS 数据必须可用。HDFS 群集必须可以运行,且 ROS 文件必须存在。如果您已移动数据文件,或者它们已损坏,或者 HDFS 群集没有响应,则 Vertica 无法启动。
语法
CREATE LOCATION 'path'
[NODE 'node' | ALL NODES]
[SHARED]
[USAGE 'usage']
[LABEL 'label']
[LIMIT 'size']
参数
- 路径
- 存储此位置数据的位置。位置所基于的文件系统类型决定了 path 格式:
-
Linux:Vertica 可以写入存储位置数据的目录的绝对路径。
-
共享文件系统:请参阅 HDFS 文件系统、S3 对象存储、Google Cloud Storage (GCS) 对象存储和 Azure Blob 存储对象存储 中的 URL 规范。
HDFS 存储位置有其他要求。
-
-
ALL NODES | NODE 'node
' - 在其上定义存储位置的一个或多个节点,为以下之一:
-
ALL NODES
(默认值):在每个节点上创建存储位置。如果还指定了 SHARED,则创建一次存储位置以供所有节点使用。 -
NODE 'node'
:在单个节点上创建存储位置,其中 node 是 NODES 系统表中节点的名称。您不能将此选项与 SHARED 一起使用。
-
SHARED
- 指示 path 设置的位置被共享(为所有节点使用),而非本地于每个节点。您不能使用 SHARED 指定单个节点;您必须使用 ALL NODES。
多数远程文件系统(例如 HDFS 和 S3)都被共享。对于这些文件系统,path 实参表示远程文件系统中所有节点存储数据的单个位置。如果使用远程文件系统,您必须指定 SHARED,即使对于单节点群集也是如此。
注意
如果 path 设置为 S3 公共存储,则始终隐含SHARED
并且可以省略。已弃用
SHARED DATA 和 SHARED DATA,TEMP 存储位置已被弃用。 -
USAGE 'usage'
- 存储位置可以保存的数据类型,其中 usage 为以下之一:
-
DATA,TEMP
(默认值):存储位置可以存储 DML 生成的永久和临时数据,以及临时表的数据。 -
TEMP
:path 指定的位置,用于存储 DML 生成的临时数据。如果 path 设置为 S3,则仅当 RemoteStorageForTemp 配置参数设置为 1 且TEMP
必须使用 ALL NODES SHARED 加以限定。有关详细信息,请参阅临时数据的 S3 存储。 -
DATA
:存储位置只能存储永久数据。 -
DEPOT
:该存储位置用于在 Eon 模式中存储存储库。仅在本地 Linux 文件系统上创建DEPOT
存储位置。Vertica 允许每个节点有单个
DEPOT
存储位置。如果要将存储库移动到不同的位置(例如,在不同的文件系统上),您必须首先删除旧的存储库存储位置,然后创建新位置。
-
-
LABEL 'label'
- 存储位置的标签,在将存储位置分配给数据对象时使用。当以后在为数据对象分配存储位置时会使用此名称。
重要
您必须为存储库存储位置提供标签。 -
LIMIT 'size'
仅当存储位置使用类型设置为
DEPOT
时才有效,指定存储库可以从存储位置的文件系统中分配的最大磁盘空间量。您可以通过两种方式指定 size:
-
integer%
:存储位置的磁盘大小所占的百分比。 -
integer{K|M|G|T}
:以千字节、兆字节、千兆字节或太字节为单位的存储位置的磁盘大小。
重要
存储库大小不能超过其所在文件系统磁盘空间的 80%。如果指定的值太大,Vertica 会发出警告并自动将该值更改为文件系统大小的 80%。如果未指定限制,则将其设置为 60%。
-
特权
超级用户
文件系统访问
Vertica 进程必须对要存储数据的位置具有读写权限。每个文件系统都有自己的要求:
示例
在本地 Linux 文件系统中创建一个存储位置,用于临时数据存储:
=> CREATE LOCATION '/home/dbadmin/testloc' USAGE 'TEMP' LABEL 'tempfiles';
在 HDFS 上创建存储位置。HDFS 群集不使用 Kerberos:
=> CREATE LOCATION 'hdfs://hadoopNS/vertica/colddata' ALL NODES SHARED
USAGE 'data' LABEL 'coldstorage';
在使用 Kerberos 的 Hadoop 群集上创建相同的存储位置。请注意报告正在使用的主体的输出:
=> CREATE LOCATION 'hdfs://hadoopNS/vertica/colddata' ALL NODES SHARED
USAGE 'data' LABEL 'coldstorage';
NOTICE 0: Performing HDFS operations using kerberos principal [vertica/hadoop.example.com]
CREATE LOCATION
为用户数据创建一个位置,授予对这些数据的访问权限以及使用这些数据创建外部表:
=> CREATE LOCATION '/tmp' ALL NODES USAGE 'user';
CREATE LOCATION
=> GRANT ALL ON LOCATION '/tmp' to Bob;
GRANT PRIVILEGE
=> CREATE EXTERNAL TABLE ext1 (x integer) AS COPY FROM '/tmp/data/ext1.dat' DELIMITER ',';
CREATE TABLE
在 S3 上创建用户存储位置和角色,以便没有自己的 S3 凭据的用户可以使用服务器凭据从 S3 读取数据:
--- set database-level credential (once):
=> ALTER DATABASE DEFAULT SET AWSAuth = 'myaccesskeyid123456:mysecretaccesskey123456789012345678901234';
=> CREATE LOCATION 's3://datalake' SHARED USAGE 'USER' LABEL 's3user';
=> CREATE ROLE ExtUsers;
--- Assign users to this role using GRANT (Role).
=> GRANT READ ON LOCATION 's3://datalake' TO ExtUsers;