Amazon Glue 数据目录入门 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon Glue 数据目录入门

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

概览

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

在本教程中,您将执行以下操作:

  1. 创建一个数据库

  2. 创建 表

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

步骤 1:创建数据库

要开始使用,请登录 Amazon Web Services Management Console 并通过 https://console.amazonaws.cn/glue.html 打开 Amazon Glue 控制台。

  1. 在 Amazon Glue 控制台中,从左侧菜单中选择 Databases(数据库)。

    
                        屏幕截图显示了 Amazon Glue 控制台左侧菜单中的 Databases(数据库)菜单项。
  2. 选择 Add database(添加数据库)。

    
                        屏幕截图显示了 Amazon Glue 控制台中的 Databases list(数据库列表)视图和 Add database(添加数据库)按钮。
  3. 输入数据库的名称。在本教程中,您可以将数据库命名为 My First Database。在 Description and location (optional) [描述和位置(可选)] 中,您可以选择添加数据库的描述和位置。

    
                        屏幕截图显示了 Amazon Glue 控制台中 Add database(添加数据库)页面上的 Database name(数据库名称)字段。

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

后续步骤

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

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

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

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

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

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

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

    例如:

    CLI

    aws glue create-database --database-input "{\"Name\":\"clidb\"}"

    Boto3

    glueClient = boto3.client('glue') response = glueClient.create_database( DatabaseInput={ 'Name': 'boto3db' } )

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

第 2 步 创建表

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

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

  2. 选择 Add table(添加表)。从下拉菜单中,选择 Add tables manually(手动添加表)。

  3. Add table(添加表)向导中,输入表的名称,设置表的属性。

  4. Database(数据库)部分中,从下拉菜单选择您在第 1 步中创建的数据库(“My First Database”)。选择 Next (下一步)

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

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

    1. 复制并粘贴 Include path(包含路径)部分中的路径。

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

    2. 选择 Next (下一步)

  7. 对于 Classification(分类),选择 CSV,对于 Delimiter(分隔符),选择 comma (,) [逗号(,)]。选择 Next (下一步)

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

  9. 指定列属性:

    1. 输入列名。

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

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

    4. 选择 Add(添加)。

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

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

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

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

后续步骤

现已填充数据目录,您可以开始在 Amazon Glue 中编写任务了。请参阅 编写任务

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

  • 创建和运行爬网程序

  • 使用 Amazon Glue 表 API

  • 使用 Amazon Glue Data Catalog 模板

  • 迁移 Apache Hive 元存储

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

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

    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')