import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * Creates a table resource in a dataset for Google BigQuery. For more information see
 * [the official documentation](https://cloud.google.com/bigquery/docs/) and
 * [API](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables).
 *
 * > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false`
 * (and run `pulumi update` to write the field to state) in order to destroy an instance.
 * It is recommended to not set this field (or set it to true) until you're ready to destroy.
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const _default = new gcp.bigquery.Dataset("default", {
 *     datasetId: "foo",
 *     friendlyName: "test",
 *     description: "This is a test description",
 *     location: "EU",
 *     defaultTableExpirationMs: 3600000,
 *     labels: {
 *         env: "default",
 *     },
 * });
 * const defaultTable = new gcp.bigquery.Table("default", {
 *     datasetId: _default.datasetId,
 *     tableId: "bar",
 *     timePartitioning: {
 *         type: "DAY",
 *     },
 *     labels: {
 *         env: "default",
 *     },
 *     schema: `[
 *   {
 *     "name": "permalink",
 *     "type": "STRING",
 *     "mode": "NULLABLE",
 *     "description": "The Permalink"
 *   },
 *   {
 *     "name": "state",
 *     "type": "STRING",
 *     "mode": "NULLABLE",
 *     "description": "State where the head office is located"
 *   }
 * ]
 * `,
 * });
 * const sheet = new gcp.bigquery.Table("sheet", {
 *     datasetId: _default.datasetId,
 *     tableId: "sheet",
 *     externalDataConfiguration: {
 *         autodetect: true,
 *         sourceFormat: "GOOGLE_SHEETS",
 *         googleSheetsOptions: {
 *             skipLeadingRows: 1,
 *         },
 *         sourceUris: ["https://docs.google.com/spreadsheets/d/123456789012345"],
 *     },
 * });
 * ```
 *
 * ## Import
 *
 * BigQuery tables can be imported using any of these accepted formats:
 *
 * * `projects/{{project}}/datasets/{{dataset_id}}/tables/{{table_id}}`
 *
 * * `{{project}}/{{dataset_id}}/{{table_id}}`
 *
 * * `{{dataset_id}}/{{table_id}}`
 *
 * When using the `pulumi import` command, BigQuery tables can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:bigquery/table:Table default projects/{{project}}/datasets/{{dataset_id}}/tables/{{table_id}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:bigquery/table:Table default {{project}}/{{dataset_id}}/{{table_id}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:bigquery/table:Table default {{dataset_id}}/{{table_id}}
 * ```
 */
export declare class Table extends pulumi.CustomResource {
    /**
     * Get an existing Table resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: TableState, opts?: pulumi.CustomResourceOptions): Table;
    /**
     * Returns true if the given object is an instance of Table.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is Table;
    /**
     * Specifies the configuration of a BigLake managed table. Structure is documented below
     */
    readonly biglakeConfiguration: pulumi.Output<outputs.bigquery.TableBiglakeConfiguration | undefined>;
    /**
     * Specifies column names to use for data clustering.
     * Up to four top-level columns are allowed, and should be specified in
     * descending priority order.
     */
    readonly clusterings: pulumi.Output<string[] | undefined>;
    /**
     * The time when this table was created, in milliseconds since the epoch.
     */
    readonly creationTime: pulumi.Output<number>;
    /**
     * The dataset ID to create the table in.
     * Changing this forces a new resource to be created.
     */
    readonly datasetId: pulumi.Output<string>;
    /**
     * Whether or not to allow the provider to destroy the instance. Unless this field is set to false
     * in state, a `=destroy` or `=update` that would delete the instance will fail.
     */
    readonly deletionProtection: pulumi.Output<boolean | undefined>;
    /**
     * The field description.
     */
    readonly description: pulumi.Output<string | undefined>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     *
     * * <a name="schema"></a>`schema` - (Optional) A JSON schema for the table.
     *
     * ~>**NOTE:** Because this field expects a JSON string, any changes to the
     * string will create a diff, even if the JSON itself hasn't changed.
     * If the API returns a different value for the same schema, e.g. it
     * switched the order of values or replaced `STRUCT` field type with `RECORD`
     * field type, we currently cannot suppress the recurring diff this causes.
     * As a workaround, we recommend using the schema as returned by the API.
     *
     * ~>**NOTE:**  If you use `externalDataConfiguration`
     * documented below and do **not** set
     * `external_data_configuration.connection_id`, schemas must be specified
     * with `external_data_configuration.schema`. Otherwise, schemas must be
     * specified with this top-level field.
     */
    readonly effectiveLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * Specifies how the table should be encrypted.
     * If left blank, the table will be encrypted with a Google-managed key; that process
     * is transparent to the user.  Structure is documented below.
     */
    readonly encryptionConfiguration: pulumi.Output<outputs.bigquery.TableEncryptionConfiguration | undefined>;
    /**
     * A hash of the resource.
     */
    readonly etag: pulumi.Output<string>;
    /**
     * The time when this table expires, in
     * milliseconds since the epoch. If not present, the table will persist
     * indefinitely. Expired tables will be deleted and their storage
     * reclaimed.
     */
    readonly expirationTime: pulumi.Output<number>;
    /**
     * Options defining open source compatible table.
     */
    readonly externalCatalogTableOptions: pulumi.Output<outputs.bigquery.TableExternalCatalogTableOptions | undefined>;
    /**
     * Describes the data format,
     * location, and other properties of a table stored outside of BigQuery.
     * By defining these properties, the data source can then be queried as
     * if it were a standard BigQuery table. Structure is documented below.
     */
    readonly externalDataConfiguration: pulumi.Output<outputs.bigquery.TableExternalDataConfiguration | undefined>;
    /**
     * A descriptive name for the table.
     */
    readonly friendlyName: pulumi.Output<string | undefined>;
    /**
     * A mapping of labels to assign to the resource.
     *
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field 'effective_labels' for all of the labels present on the resource.
     */
    readonly labels: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The time when this table was last modified, in milliseconds since the epoch.
     */
    readonly lastModifiedTime: pulumi.Output<number>;
    /**
     * The geographic location where the table resides. This value is inherited from the dataset.
     */
    readonly location: pulumi.Output<string>;
    /**
     * If specified, configures this table as a materialized view.
     * Structure is documented below.
     */
    readonly materializedView: pulumi.Output<outputs.bigquery.TableMaterializedView | undefined>;
    /**
     * The maximum staleness of data that could be
     * returned when the table (or stale MV) is queried. Staleness encoded as a
     * string encoding of [SQL IntervalValue
     * type](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#interval_type).
     */
    readonly maxStaleness: pulumi.Output<string>;
    /**
     * The size of this table in bytes, excluding any data in the streaming buffer.
     */
    readonly numBytes: pulumi.Output<number>;
    /**
     * The number of bytes in the table that are considered "long-term storage".
     */
    readonly numLongTermBytes: pulumi.Output<number>;
    /**
     * The number of rows of data in this table, excluding any data in the streaming buffer.
     */
    readonly numRows: pulumi.Output<number>;
    /**
     * The ID of the project in which the resource belongs. If it
     * is not provided, the provider project is used.
     */
    readonly project: pulumi.Output<string>;
    /**
     * The combination of labels configured directly on the resource and default labels configured on the provider.
     */
    readonly pulumiLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * If specified, configures range-based
     * partitioning for this table. Structure is documented below.
     */
    readonly rangePartitioning: pulumi.Output<outputs.bigquery.TableRangePartitioning | undefined>;
    /**
     * If set to true, queries over this table
     * require a partition filter that can be used for partition elimination to be
     * specified.
     */
    readonly requirePartitionFilter: pulumi.Output<boolean | undefined>;
    /**
     * The tags attached to this table. Tag keys are
     * globally unique. Tag key is expected to be in the namespaced format, for
     * example "123456789012/environment" where 123456789012 is the ID of the
     * parent organization or project resource for this tag key. Tag value is
     * expected to be the short name, for example "Production". See [Tag definitions](https://cloud.google.com/iam/docs/tags-access-control#definitions)
     * for more details.
     */
    readonly resourceTags: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * A JSON schema for the table.
     */
    readonly schema: pulumi.Output<string>;
    /**
     * Specifies metadata of the foreign data type definition in field schema.
     */
    readonly schemaForeignTypeInfo: pulumi.Output<outputs.bigquery.TableSchemaForeignTypeInfo | undefined>;
    /**
     * The URI of the created resource.
     */
    readonly selfLink: pulumi.Output<string>;
    /**
     * Defines the primary key and foreign keys.
     * Structure is documented below.
     */
    readonly tableConstraints: pulumi.Output<outputs.bigquery.TableTableConstraints | undefined>;
    /**
     * A unique ID for the resource.
     * Changing this forces a new resource to be created.
     */
    readonly tableId: pulumi.Output<string>;
    /**
     * View sets the optional parameter "view": Specifies the view that determines which table information is returned. By
     * default, basic table information and storage statistics (STORAGE_STATS) are returned. Possible values:
     * TABLE_METADATA_VIEW_UNSPECIFIED, BASIC, STORAGE_STATS, FULL
     */
    readonly tableMetadataView: pulumi.Output<string | undefined>;
    /**
     * Replication info of a table created
     * using "AS REPLICA" DDL like:
     * `CREATE MATERIALIZED VIEW mv1 AS REPLICA OF srcMv`.
     * Structure is documented below.
     */
    readonly tableReplicationInfo: pulumi.Output<outputs.bigquery.TableTableReplicationInfo | undefined>;
    /**
     * If specified, configures time-based
     * partitioning for this table. Structure is documented below.
     */
    readonly timePartitioning: pulumi.Output<outputs.bigquery.TableTimePartitioning | undefined>;
    /**
     * Describes the table type.
     */
    readonly type: pulumi.Output<string>;
    /**
     * If specified, configures this table as a view.
     * Structure is documented below.
     */
    readonly view: pulumi.Output<outputs.bigquery.TableView | undefined>;
    /**
     * Create a Table resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: TableArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Table resources.
 */
export interface TableState {
    /**
     * Specifies the configuration of a BigLake managed table. Structure is documented below
     */
    biglakeConfiguration?: pulumi.Input<inputs.bigquery.TableBiglakeConfiguration>;
    /**
     * Specifies column names to use for data clustering.
     * Up to four top-level columns are allowed, and should be specified in
     * descending priority order.
     */
    clusterings?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * The time when this table was created, in milliseconds since the epoch.
     */
    creationTime?: pulumi.Input<number>;
    /**
     * The dataset ID to create the table in.
     * Changing this forces a new resource to be created.
     */
    datasetId?: pulumi.Input<string>;
    /**
     * Whether or not to allow the provider to destroy the instance. Unless this field is set to false
     * in state, a `=destroy` or `=update` that would delete the instance will fail.
     */
    deletionProtection?: pulumi.Input<boolean>;
    /**
     * The field description.
     */
    description?: pulumi.Input<string>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     *
     * * <a name="schema"></a>`schema` - (Optional) A JSON schema for the table.
     *
     * ~>**NOTE:** Because this field expects a JSON string, any changes to the
     * string will create a diff, even if the JSON itself hasn't changed.
     * If the API returns a different value for the same schema, e.g. it
     * switched the order of values or replaced `STRUCT` field type with `RECORD`
     * field type, we currently cannot suppress the recurring diff this causes.
     * As a workaround, we recommend using the schema as returned by the API.
     *
     * ~>**NOTE:**  If you use `externalDataConfiguration`
     * documented below and do **not** set
     * `external_data_configuration.connection_id`, schemas must be specified
     * with `external_data_configuration.schema`. Otherwise, schemas must be
     * specified with this top-level field.
     */
    effectiveLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Specifies how the table should be encrypted.
     * If left blank, the table will be encrypted with a Google-managed key; that process
     * is transparent to the user.  Structure is documented below.
     */
    encryptionConfiguration?: pulumi.Input<inputs.bigquery.TableEncryptionConfiguration>;
    /**
     * A hash of the resource.
     */
    etag?: pulumi.Input<string>;
    /**
     * The time when this table expires, in
     * milliseconds since the epoch. If not present, the table will persist
     * indefinitely. Expired tables will be deleted and their storage
     * reclaimed.
     */
    expirationTime?: pulumi.Input<number>;
    /**
     * Options defining open source compatible table.
     */
    externalCatalogTableOptions?: pulumi.Input<inputs.bigquery.TableExternalCatalogTableOptions>;
    /**
     * Describes the data format,
     * location, and other properties of a table stored outside of BigQuery.
     * By defining these properties, the data source can then be queried as
     * if it were a standard BigQuery table. Structure is documented below.
     */
    externalDataConfiguration?: pulumi.Input<inputs.bigquery.TableExternalDataConfiguration>;
    /**
     * A descriptive name for the table.
     */
    friendlyName?: pulumi.Input<string>;
    /**
     * A mapping of labels to assign to the resource.
     *
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field 'effective_labels' for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The time when this table was last modified, in milliseconds since the epoch.
     */
    lastModifiedTime?: pulumi.Input<number>;
    /**
     * The geographic location where the table resides. This value is inherited from the dataset.
     */
    location?: pulumi.Input<string>;
    /**
     * If specified, configures this table as a materialized view.
     * Structure is documented below.
     */
    materializedView?: pulumi.Input<inputs.bigquery.TableMaterializedView>;
    /**
     * The maximum staleness of data that could be
     * returned when the table (or stale MV) is queried. Staleness encoded as a
     * string encoding of [SQL IntervalValue
     * type](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#interval_type).
     */
    maxStaleness?: pulumi.Input<string>;
    /**
     * The size of this table in bytes, excluding any data in the streaming buffer.
     */
    numBytes?: pulumi.Input<number>;
    /**
     * The number of bytes in the table that are considered "long-term storage".
     */
    numLongTermBytes?: pulumi.Input<number>;
    /**
     * The number of rows of data in this table, excluding any data in the streaming buffer.
     */
    numRows?: pulumi.Input<number>;
    /**
     * The ID of the project in which the resource belongs. If it
     * is not provided, the provider project is used.
     */
    project?: pulumi.Input<string>;
    /**
     * The combination of labels configured directly on the resource and default labels configured on the provider.
     */
    pulumiLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * If specified, configures range-based
     * partitioning for this table. Structure is documented below.
     */
    rangePartitioning?: pulumi.Input<inputs.bigquery.TableRangePartitioning>;
    /**
     * If set to true, queries over this table
     * require a partition filter that can be used for partition elimination to be
     * specified.
     */
    requirePartitionFilter?: pulumi.Input<boolean>;
    /**
     * The tags attached to this table. Tag keys are
     * globally unique. Tag key is expected to be in the namespaced format, for
     * example "123456789012/environment" where 123456789012 is the ID of the
     * parent organization or project resource for this tag key. Tag value is
     * expected to be the short name, for example "Production". See [Tag definitions](https://cloud.google.com/iam/docs/tags-access-control#definitions)
     * for more details.
     */
    resourceTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * A JSON schema for the table.
     */
    schema?: pulumi.Input<string>;
    /**
     * Specifies metadata of the foreign data type definition in field schema.
     */
    schemaForeignTypeInfo?: pulumi.Input<inputs.bigquery.TableSchemaForeignTypeInfo>;
    /**
     * The URI of the created resource.
     */
    selfLink?: pulumi.Input<string>;
    /**
     * Defines the primary key and foreign keys.
     * Structure is documented below.
     */
    tableConstraints?: pulumi.Input<inputs.bigquery.TableTableConstraints>;
    /**
     * A unique ID for the resource.
     * Changing this forces a new resource to be created.
     */
    tableId?: pulumi.Input<string>;
    /**
     * View sets the optional parameter "view": Specifies the view that determines which table information is returned. By
     * default, basic table information and storage statistics (STORAGE_STATS) are returned. Possible values:
     * TABLE_METADATA_VIEW_UNSPECIFIED, BASIC, STORAGE_STATS, FULL
     */
    tableMetadataView?: pulumi.Input<string>;
    /**
     * Replication info of a table created
     * using "AS REPLICA" DDL like:
     * `CREATE MATERIALIZED VIEW mv1 AS REPLICA OF srcMv`.
     * Structure is documented below.
     */
    tableReplicationInfo?: pulumi.Input<inputs.bigquery.TableTableReplicationInfo>;
    /**
     * If specified, configures time-based
     * partitioning for this table. Structure is documented below.
     */
    timePartitioning?: pulumi.Input<inputs.bigquery.TableTimePartitioning>;
    /**
     * Describes the table type.
     */
    type?: pulumi.Input<string>;
    /**
     * If specified, configures this table as a view.
     * Structure is documented below.
     */
    view?: pulumi.Input<inputs.bigquery.TableView>;
}
/**
 * The set of arguments for constructing a Table resource.
 */
export interface TableArgs {
    /**
     * Specifies the configuration of a BigLake managed table. Structure is documented below
     */
    biglakeConfiguration?: pulumi.Input<inputs.bigquery.TableBiglakeConfiguration>;
    /**
     * Specifies column names to use for data clustering.
     * Up to four top-level columns are allowed, and should be specified in
     * descending priority order.
     */
    clusterings?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * The dataset ID to create the table in.
     * Changing this forces a new resource to be created.
     */
    datasetId: pulumi.Input<string>;
    /**
     * Whether or not to allow the provider to destroy the instance. Unless this field is set to false
     * in state, a `=destroy` or `=update` that would delete the instance will fail.
     */
    deletionProtection?: pulumi.Input<boolean>;
    /**
     * The field description.
     */
    description?: pulumi.Input<string>;
    /**
     * Specifies how the table should be encrypted.
     * If left blank, the table will be encrypted with a Google-managed key; that process
     * is transparent to the user.  Structure is documented below.
     */
    encryptionConfiguration?: pulumi.Input<inputs.bigquery.TableEncryptionConfiguration>;
    /**
     * The time when this table expires, in
     * milliseconds since the epoch. If not present, the table will persist
     * indefinitely. Expired tables will be deleted and their storage
     * reclaimed.
     */
    expirationTime?: pulumi.Input<number>;
    /**
     * Options defining open source compatible table.
     */
    externalCatalogTableOptions?: pulumi.Input<inputs.bigquery.TableExternalCatalogTableOptions>;
    /**
     * Describes the data format,
     * location, and other properties of a table stored outside of BigQuery.
     * By defining these properties, the data source can then be queried as
     * if it were a standard BigQuery table. Structure is documented below.
     */
    externalDataConfiguration?: pulumi.Input<inputs.bigquery.TableExternalDataConfiguration>;
    /**
     * A descriptive name for the table.
     */
    friendlyName?: pulumi.Input<string>;
    /**
     * A mapping of labels to assign to the resource.
     *
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field 'effective_labels' for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * If specified, configures this table as a materialized view.
     * Structure is documented below.
     */
    materializedView?: pulumi.Input<inputs.bigquery.TableMaterializedView>;
    /**
     * The maximum staleness of data that could be
     * returned when the table (or stale MV) is queried. Staleness encoded as a
     * string encoding of [SQL IntervalValue
     * type](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#interval_type).
     */
    maxStaleness?: pulumi.Input<string>;
    /**
     * The ID of the project in which the resource belongs. If it
     * is not provided, the provider project is used.
     */
    project?: pulumi.Input<string>;
    /**
     * If specified, configures range-based
     * partitioning for this table. Structure is documented below.
     */
    rangePartitioning?: pulumi.Input<inputs.bigquery.TableRangePartitioning>;
    /**
     * If set to true, queries over this table
     * require a partition filter that can be used for partition elimination to be
     * specified.
     */
    requirePartitionFilter?: pulumi.Input<boolean>;
    /**
     * The tags attached to this table. Tag keys are
     * globally unique. Tag key is expected to be in the namespaced format, for
     * example "123456789012/environment" where 123456789012 is the ID of the
     * parent organization or project resource for this tag key. Tag value is
     * expected to be the short name, for example "Production". See [Tag definitions](https://cloud.google.com/iam/docs/tags-access-control#definitions)
     * for more details.
     */
    resourceTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * A JSON schema for the table.
     */
    schema?: pulumi.Input<string>;
    /**
     * Specifies metadata of the foreign data type definition in field schema.
     */
    schemaForeignTypeInfo?: pulumi.Input<inputs.bigquery.TableSchemaForeignTypeInfo>;
    /**
     * Defines the primary key and foreign keys.
     * Structure is documented below.
     */
    tableConstraints?: pulumi.Input<inputs.bigquery.TableTableConstraints>;
    /**
     * A unique ID for the resource.
     * Changing this forces a new resource to be created.
     */
    tableId: pulumi.Input<string>;
    /**
     * View sets the optional parameter "view": Specifies the view that determines which table information is returned. By
     * default, basic table information and storage statistics (STORAGE_STATS) are returned. Possible values:
     * TABLE_METADATA_VIEW_UNSPECIFIED, BASIC, STORAGE_STATS, FULL
     */
    tableMetadataView?: pulumi.Input<string>;
    /**
     * Replication info of a table created
     * using "AS REPLICA" DDL like:
     * `CREATE MATERIALIZED VIEW mv1 AS REPLICA OF srcMv`.
     * Structure is documented below.
     */
    tableReplicationInfo?: pulumi.Input<inputs.bigquery.TableTableReplicationInfo>;
    /**
     * If specified, configures time-based
     * partitioning for this table. Structure is documented below.
     */
    timePartitioning?: pulumi.Input<inputs.bigquery.TableTimePartitioning>;
    /**
     * If specified, configures this table as a view.
     * Structure is documented below.
     */
    view?: pulumi.Input<inputs.bigquery.TableView>;
}
