开始使用 AWS Glue Data Catalog - AWS Glue

开始使用 AWS Glue Data Catalog

AWS Glue Data Catalog 是您的持久性技术元数据存储。它是一项托管式服务,可用于存储、注释和共享 AWS 云中的元数据。有关更多信息,请参阅 AWS Glue Data Catalog

AWS Glue 控制台和部分用户界面已于近期更新。

概述

您可以使用本教程创建您的第一个 AWS Glue 数据目录,其使用 Amazon S3 存储桶作为您的数据源。

在本教程中,您将使用 AWS Glue 控制台执行以下操作:

  1. 创建一个数据库

  2. 创建表

  3. 使用 Amazon S3 桶作为数据来源

完成这些步骤后,您将成功使用 Amazon S3 存储桶作为数据源来填充 AWS Glue 数据目录。

步骤 1:创建数据库

要开始使用,请登录 AWS Management Console,然后打开 AWS Glue 控制台

要使用 AWS Glue 控制台创建数据库:

  1. 在 AWS Glue 控制台中,从左侧菜单中选择 Data catalog(数据目录)下的 Databases(数据库)。

  2. 选择 Add database(添加数据库)。

  3. 在“创建数据库”页面中,输入数据库的名称。在位置 - 可选部分中,设置 URI 位置以供 Data Catalog 的客户端使用。如果您不知道信息,则可以继续创建数据库。

  4. (可选)。输入数据库的描述。

  5. 选择创建数据库

恭喜您,您刚刚使用 AWS Glue 控制台搭建了您的第一个数据库。您的新数据库将显示在可用数据库列表中。您可以在 Databases(数据库)控制面板中选择数据库名称,编辑数据库。

后续步骤

Other ways to create a database: (创建数据库的其他方法:)

您刚刚使用 AWS Glue 控制台创建了一个数据库,但还有其他方法也可以创建数据库:

  • 您可以使用爬网程序自动为自己创建数据库和表。要使用爬网程序设置数据库,请参阅 在 AWS Glue 控制台中使用爬网程序

  • 您可以使用 AWS CloudFormation 模板。请参阅 使用 AWS Glue Data Catalog 模板创建 AWS Glue 资源

  • 您还可以使用 AWS Glue 数据库 API 操作来创建数据库。

    要使用 create 操作来创建数据库,可通过添加 DatabaseInput(必需)参数来构建请求。

    例如:

    以下示例说明了如何使用 CLI、Boto3 或 DDL 根据您在教程中使用的 S3 存储桶中的相同 flights_data.csv 文件来定义表。

    CLI
    aws glue create-database --database-input "{\"Name\":\"clidb\"}"
    Boto3
    glueClient = boto3.client('glue') response = glueClient.create_database( DatabaseInput={ 'Name': 'boto3db' } )

有关数据库 API 数据类型、结构和操作的更多信息,请参阅 数据库 API

后续步骤

在下一个部分中,您将创建一个表并将该表添加到您的数据库中。

您还可以了解您数据目录的设置和权限。请参阅 在 AWS Glue 控制台中使用数据目录设置

第 2 步。创建表

在本步骤中,使用 AWS Glue 控制台创建表。

  1. 在 AWS Glue 控制台中,从左侧菜单中选择 Tables(表)。

  2. 选择 Add table (添加表)

  3. 通过在 Table details(表详细信息)中输入表的名称,设置表的属性。

  4. Databases(数据库)部分中,从下拉菜单选择您在步骤 1 中创建的数据库。

  5. Add a data store(添加数据存储)部分中,默认将选择 S3 作为源类型。

  6. 对于 Data is located in(数据位置),选择 Specified path in another account(另一个账户中的指定路径)。

  7. 复制并粘贴 Include path(包含路径)输入字段的路径:

    s3://crawler-public-us-west-2/flight/2016/csv/

  8. Data format(数据格式)部分中,对于 Classification(分类),选择 CSV,对于 Delimiter(分隔符),选择 comma (,) [逗号(,)]。选择下一步

  9. 系统会要求您定义架构。架构定义了数据记录的结构和格式。选择 Add column(添加列)。(有关更多信息,请参阅 架构注册表)。

  10. 指定列属性:

    1. 输入列名。

    2. 对于 Column Type(列类型),默认情况下已选中 string(字符串)。

    3. 对于 Column number(列编号),默认情况下已选中 1。

    4. 选择添加

  11. 系统会要求您添加分区索引。该项为可选项。要跳过此步,选择 Next(下一步)。

  12. 此时将显示表属性的摘要。如果一切都符合预期,请选择创建。否则,请选择 Back(返回)并根据需要进行编辑。

恭喜您,您已手动创建了一个表并成功将其关联到数据库。新创建的表将显示在 Tables(表)控制面板中。您可以在控制面板中修改和管理您的所有表。

有关更多信息,请参阅 在 AWS Glue 控制台中使用表

后续步骤

后续步骤

现已填充数据目录,您可以开始在 AWS Glue 中编写任务了。请参阅使用 AWS Glue Studio 构建可视化 ETL 作业

除了使用控制台之外,还有其他方法可以在数据目录中定义表,包括:

  • 创建和运行爬网程序

  • 在 AWS Glue 中向爬网程序添加分类器

  • 使用 AWS Glue 表 API

  • 使用 AWS Glue Data Catalog 模板

  • 迁移 Apache Hive 元存储

  • 使用 AWS CLI、Boto3 或数据定义语言(DDL)

    以下示例说明了如何使用 CLI、Boto3 或 DDL 根据您在教程中使用的 S3 存储桶中的相同 flights_data.csv 文件来定义表。

    请参阅有关如何构造 AWS CLI 命令的文档。CLI 示例包含“aws glue create-table --table-input”值的 JSON 语法。

    CLI
    { "Name": "flights_data_cli", "StorageDescriptor": { "Columns": [ { "Name": "year", "Type": "bigint" }, { "Name": "quarter", "Type": "bigint" } ], "Location": "s3://crawler-public-us-west-2/flight/2016/csv", "InputFormat": "org.apache.hadoop.mapred.TextInputFormat", "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "Compressed": false, "NumberOfBuckets": -1, "SerdeInfo": { "SerializationLibrary": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe", "Parameters": { "field.delim": ",", "serialization.format": "," } } }, "PartitionKeys": [ { "Name": "mon", "Type": "string" } ], "TableType": "EXTERNAL_TABLE", "Parameters": { "EXTERNAL": "TRUE", "classification": "csv", "columnsOrdered": "true", "compressionType": "none", "delimiter": ",", "skip.header.line.count": "1", "typeOfData": "file" } }
    Boto3
    import boto3 glue_client = boto3.client("glue") response = glue_client.create_table( DatabaseName='sampledb', TableInput={ 'Name': 'flights_data_manual', 'StorageDescriptor': { 'Columns': [{ 'Name': 'year', 'Type': 'bigint' }, { 'Name': 'quarter', 'Type': 'bigint' }], 'Location': 's3://crawler-public-us-west-2/flight/2016/csv', 'InputFormat': 'org.apache.hadoop.mapred.TextInputFormat', 'OutputFormat': 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat', 'Compressed': False, 'NumberOfBuckets': -1, 'SerdeInfo': { 'SerializationLibrary': 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe', 'Parameters': { 'field.delim': ',', 'serialization.format': ',' } }, }, 'PartitionKeys': [{ 'Name': 'mon', 'Type': 'string' }], 'TableType': 'EXTERNAL_TABLE', 'Parameters': { 'EXTERNAL': 'TRUE', 'classification': 'csv', 'columnsOrdered': 'true', 'compressionType': 'none', 'delimiter': ',', 'skip.header.line.count': '1', 'typeOfData': 'file' } } )
    DDL
    CREATE EXTERNAL TABLE `sampledb`.`flights_data` ( `year` bigint, `quarter` bigint) PARTITIONED BY ( `mon` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://crawler-public-us-west-2/flight/2016/csv/' TBLPROPERTIES ( 'classification'='csv', 'columnsOrdered'='true', 'compressionType'='none', 'delimiter'=',', 'skip.header.line.count'='1', 'typeOfData'='file')