You need to enable JavaScript to run this app.
导航
基础使用
最近更新时间:2024.08.13 20:03:03首次发布时间:2024.08.13 20:03:03

EMR Serverless Presto 语法完全兼容开源 Presto 语法,详细语法规则请参考 Presto 语法说明。本文主要对 Presto 的一些基本操作进行介绍和演示。

库表操作

数据库操作

  1. 创建数据库。
CREATE SCHEMA IF NOT EXISTS SERVERLESS_PRESTO_SCHEMA;
  1. 创建数据库,同时设置对应的 TOS Bucket 和路径。
CREATE SCHEMA IF NOT EXISTS SERVERLESS_PRESTO_SCHEMA
WITH (
    LOCATION='tos://${your-presto-bucket}/serverless/presto'
    );

注意

在自定义 Bucket 时,需要确认该 Bucket 已经创建,并且具有该 Bucket 的读写权限。

  1. 删除数据库。
DROP SCHEMA SERVERLESS_PRESTO_SCHEMA;

表操作

  1. 创建表。
CREATE TABLE IF NOT EXISTS SP_TABLE (
    ID BIGINT,
    NAME VARCHAR,
    AGE INT
);
  1. 创建表并设置存储路径和存储格式。
CREATE TABLE IF NOT EXISTS SP_TABLE (
    ID BIGINT,
    NAME VARCHAR,
    AGE INT
)
COMMENT 'EMR SERVERLESS TABLE'
WITH (
    EXTERNAL_LOCATION='tos://${your-presto-bucket}/serverless/presto/',
    FORMAT='ORC'
);

注意

  • EXTERNAL_LOCATION 需要指定为一个目录。
  • FORMAT 默认为 ORC,可以按需设置为 Parquet,TEXTFILE 等文件格式。
  1. 查看表信息。
DESC SP_TABLE;
  1. 插入数据。
INSERT INTO SP_TABLE
VALUES (1, 'Serverless', 0),
       (2, 'Presto', 1);
  1. 查询数据。
SELECT * FROM SP_TABLE;
  1. 删除表。
DROP TABLE SP_TABLE;

Presto 访问湖格式数据

目前EMR Serverless Presto 支持查询 Hudi、Iceberg 和 Delta 三种湖格式数据。可以通过 EMR Serverless Spark 创建湖格式库表,执行写入操作,然后通过 Presto 执行查询。详情请参考 Spark 文档

操作 Hudi 数据

EMR Serverless Presto 默认 Catalog 为 Hive,在操作 Hudi 数据之前需要先将 Catalog 更新为 Hudi。

-- 方式一
USE HUDI.YOUR_HUDI_SCHEMA;

-- 方式二
SELECT
  *
FROM
  HUDI.PRESTO_HUDI_DB.HUDI_TBL;

操作 Iceberg 数据

EMR Serverless Presto 默认 Catalog 为 Hive,在操作 Iceberg 数据之前需要先将 Catalog 更新为 Icerberg。

-- 方式一
USE ICEBERG.YOUR_HUDI_SCHEMA;

-- 方式二
SELECT
  *
FROM
  ICEBERG.PRESTO_ICEBERG_DB.ICEBERG_TBL;

操作 Delta 数据

EMR Serverless Presto 默认 Catalog 为 Hive,在操作 Delta 数据之前需要先将 Catalog 更新为 Delta。

-- 方式一
USE DELTA.YOUR_HUDI_SCHEMA;

-- 方式二
SELECT
  *
FROM
  DELTA.PRESTO_DELTA_DB.DELTA_TBL;

注意

  • 为了保障数据安全和集群稳定性,目前不支持用户自定义 UDF,如有 UDF 需求建议使用 EMR Serverless Spark。
  • 为了保障集群稳定性,不建议在 Presto 集群上执行大型的 ETL 作业,建议使用 EMR Serverless Spark 执行大型 ETL 作业。