CREATE LOCATION

创建可供 Vertica 存储数据的存储位置。创建该位置后,可以在其中存储策略,以将该存储位置分配给将在此位置存储数据的数据库对象。

语法

CREATE LOCATION 'path'
    [NODE 'node' | ALL NODES]
    [SHARED]
    [USAGE 'usage']
    [LABEL 'label']
    [LIMIT 'size']

参数

路径
存储此位置数据的位置。位置所基于的文件系统类型决定了 path 格式:

HDFS 存储位置有其他要求

ALL NODES | NODE 'node'
在其上定义存储位置的一个或多个节点,为以下之一:
  • ALL NODES (默认值):在每个节点上创建存储位置。如果还指定了 SHARED,则创建一次存储位置以供所有节点使用。

  • NODE 'node':在单个节点上创建存储位置,其中 nodeNODES 系统表中节点的名称。您不能将此选项与 SHARED 一起使用。

SHARED
指示 path 设置的位置被共享(为所有节点使用),而非本地于每个节点。您不能使用 SHARED 指定单个节点;您必须使用 ALL NODES。

多数远程文件系统(例如 HDFS 和 S3)都被共享。对于这些文件系统,path 实参表示远程文件系统中所有节点存储数据的单个位置。如果使用远程文件系统,您必须指定 SHARED,即使对于单节点群集也是如此。

USAGE 'usage'
存储位置可以保存的数据类型,其中 usage 为以下之一:
  • DATA,TEMP (默认值):存储位置可以存储 DML 生成的永久和临时数据,以及临时表的数据。

  • TEMPpath 指定的位置,用于存储 DML 生成的临时数据。如果 path 设置为 S3,则仅当 RemoteStorageForTemp 配置参数设置为 1 且 TEMP 必须使用 ALL NODES SHARED 加以限定。有关详细信息,请参阅临时数据的 S3 存储

  • DATA:存储位置只能存储永久数据。

  • USER:具有 READ 和 WRITE 权限的用户可以访问此存储位置的数据和外部表

  • DEPOT:该存储位置用于在 Eon 模式中存储存储库。仅在本地 Linux 文件系统上创建 DEPOT 存储位置。

    Vertica 允许每个节点有单个 DEPOT 存储位置。如果要将存储库移动到不同的位置(例如,在不同的文件系统上),您必须首先删除旧的存储库存储位置,然后创建新位置。

LABEL 'label'
存储位置的标签,在将存储位置分配给数据对象时使用。当以后在为数据对象分配存储位置时会使用此名称。
LIMIT 'size'

仅当存储位置使用类型设置为 DEPOT 时才有效,指定存储库可以从存储位置的文件系统中分配的最大磁盘空间量。

您可以通过两种方式指定 size

  • integer%:存储位置的磁盘大小所占的百分比。

  • integer{K|M|G|T}:以千字节、兆字节、千兆字节或太字节为单位的存储位置的磁盘大小。

如果未指定限制,则将其设置为 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;

另请参阅