@aws-cdk/aws-glue-alpha
Version:
The CDK Construct Library for AWS::Glue
223 lines (222 loc) • 7.74 kB
TypeScript
import { CfnTable } from 'aws-cdk-lib/aws-glue';
import * as iam from 'aws-cdk-lib/aws-iam';
import { IResource, Resource } from 'aws-cdk-lib/core';
import { Construct } from 'constructs';
import { DataFormat } from './data-format';
import { IDatabase } from './database';
import { Column } from './schema';
import { StorageParameter } from './storage-parameter';
/**
* Properties of a Partition Index.
*/
export interface PartitionIndex {
/**
* The name of the partition index.
*
* @default - a name will be generated for you.
*/
readonly indexName?: string;
/**
* The partition key names that comprise the partition
* index. The names must correspond to a name in the
* table's partition keys.
*/
readonly keyNames: string[];
}
export interface ITable extends IResource {
/**
* @attribute
*/
readonly tableArn: string;
/**
* @attribute
*/
readonly tableName: string;
}
export interface TableAttributes {
readonly tableArn: string;
readonly tableName: string;
}
export interface TableBaseProps {
/**
* Name of the table.
*
* @default - generated by CDK.
*/
readonly tableName?: string;
/**
* Description of the table.
*
* @default generated
*/
readonly description?: string;
/**
* Database in which to store the table.
*/
readonly database: IDatabase;
/**
* Columns of the table.
*/
readonly columns: Column[];
/**
* Partition columns of the table.
*
* @default table is not partitioned
*/
readonly partitionKeys?: Column[];
/**
* Partition indexes on the table. A maximum of 3 indexes
* are allowed on a table. Keys in the index must be part
* of the table's partition keys.
*
* @default table has no partition indexes
*/
readonly partitionIndexes?: PartitionIndex[];
/**
* Storage type of the table's data.
*/
readonly dataFormat: DataFormat;
/**
* Indicates whether the table's data is compressed or not.
*
* @default false
*/
readonly compressed?: boolean;
/**
* Indicates whether the table data is stored in subdirectories.
*
* @default false
*/
readonly storedAsSubDirectories?: boolean;
/**
* Enables partition filtering.
*
* @see https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index
*
* @default - The parameter is not defined
*/
readonly enablePartitionFiltering?: boolean;
/**
* The user-supplied properties for the description of the physical storage of this table. These properties help describe the format of the data that is stored within the crawled data sources.
*
* The key/value pairs that are allowed to be submitted are not limited, however their functionality is not guaranteed.
*
* Some keys will be auto-populated by glue crawlers, however, you can override them by specifying the key and value in this property.
*
* @see https://docs.aws.amazon.com/glue/latest/dg/table-properties-crawler.html
*
* @see https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_TABLE.html#r_CREATE_EXTERNAL_TABLE-parameters - under _"TABLE PROPERTIES"_
*
* @example
*
* declare const glueDatabase: glue.IDatabase;
* const table = new glue.Table(this, 'Table', {
* storageParameters: [
* glue.StorageParameter.skipHeaderLineCount(1),
* glue.StorageParameter.compressionType(glue.CompressionType.GZIP),
* glue.StorageParameter.custom('foo', 'bar'), // Will have no effect
* glue.StorageParameter.custom('separatorChar', ','), // Will describe the separator char used in the data
* glue.StorageParameter.custom(glue.StorageParameters.WRITE_PARALLEL, 'off'),
* ],
* // ...
* database: glueDatabase,
* columns: [{
* name: 'col1',
* type: glue.Schema.STRING,
* }],
* dataFormat: glue.DataFormat.CSV,
* });
*
* @default - The parameter is not defined
*/
readonly storageParameters?: StorageParameter[];
/**
* The key/value pairs define properties associated with the table.
* The key/value pairs that are allowed to be submitted are not limited, however their functionality is not guaranteed.
*
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html#cfn-glue-table-tableinput-parameters
*
* @default - The parameter is not defined
*/
readonly parameters?: {
[key: string]: string;
};
}
/**
* A Glue table.
*/
export declare abstract class TableBase extends Resource implements ITable {
static fromTableArn(scope: Construct, id: string, tableArn: string): ITable;
/**
* Creates a Table construct that represents an external table.
*
* @param scope The scope creating construct (usually `this`).
* @param id The construct's id.
* @param attrs Import attributes
*/
static fromTableAttributes(scope: Construct, id: string, attrs: TableAttributes): ITable;
protected abstract readonly tableResource: CfnTable;
abstract readonly tableName: string;
abstract readonly tableArn: string;
abstract readonly partitionIndexes?: PartitionIndex[];
/**
* Database this table belongs to.
*/
readonly database: IDatabase;
/**
* Indicates whether the table's data is compressed or not.
*/
readonly compressed: boolean;
/**
* Format of this table's data files.
*/
readonly dataFormat: DataFormat;
/**
* This table's columns.
*/
readonly columns: Column[];
/**
* This table's partition keys if the table is partitioned.
*/
readonly partitionKeys?: Column[];
/**
* The tables' storage descriptor properties.
*/
readonly storageParameters?: StorageParameter[];
/**
* The tables' properties associated with the table.
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html#cfn-glue-table-tableinput-parameters
*/
protected readonly parameters: {
[key: string]: string;
};
/**
* Partition indexes must be created one at a time. To avoid
* race conditions, we store the resource and add dependencies
* each time a new partition index is created.
*/
private partitionIndexCustomResources;
constructor(scope: Construct, id: string, props: TableBaseProps);
abstract grantRead(grantee: iam.IGrantable): iam.Grant;
abstract grantWrite(grantee: iam.IGrantable): iam.Grant;
abstract grantReadWrite(grantee: iam.IGrantable): iam.Grant;
/**
* Add a partition index to the table. You can have a maximum of 3 partition
* indexes to a table. Partition index keys must be a subset of the table's
* partition keys.
*
* @see https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html
*/
addPartitionIndex(index: PartitionIndex): void;
private generateIndexName;
private validatePartitionIndex;
/**
* Grant the given identity custom permissions.
*/
grant(grantee: iam.IGrantable, actions: string[]): iam.Grant;
/**
* Grant the given identity custom permissions to ALL underlying resources of the table.
* Permissions will be granted to the catalog, the database, and the table.
*/
grantToUnderlyingResources(grantee: iam.IGrantable, actions: string[]): iam.Grant;
}