Propel Data Pools are ClickHouse tables with a pipeline to ingest data from a data source. With the API, you can create an empty Data Pool that creates table in Propel’s Serverless ClickHouse.

See the Create Data Pool API reference documentation.

API Arguments

The table below describes the input parameters for the createDataPoolV2 API.

ArgumentDescriptionRequired
uniqueNameThe Data Pool’s unique name. If not specified, Propel will set the ID as the unique name.No
descriptionThe Data Pool’s description.No
timestampThe table’s default timestamp column. Used as the default timestamp for the Query APIs.No
columnsThe list of column names and their types.Yes
accessControlEnabledEnables or disables access control for the Data Pool. If the Data Pool has access control enabled, Applications must be assigned Data Pool Access Policies in order to query the Data Pool and its Metrics.No
tableSettingsInputThe tableSettingsInput object define how the Data Pool’s table is created in ClickHouse. See table settings below.No

Table settings

The table settings define how the table is created in ClickHouse. To learn more about table engines, read our guide on How to select a table engine and sorting key.

Example: Create a MergeTree table

This example shows how to create a Data Pool using the API and Terraform.

mutation {
  createDataPoolV2(
    input: {
      uniqueName: "New TacoSoft Demo Data"
      description: "A sample dataset consisting of orders for a taco ordering SaaS"
      timestamp: { columnName: "timestamp" }
      columns: [
        { columnName: "quantity", type: INT32, isNullable: false },
        { columnName: "taco_name", type: STRING, isNullable: false },
        { columnName: "sauce_name", type: STRING, isNullable: false },
        { columnName: "restaurant_id", type: STRING, isNullable: false },
        { columnName: "restaurant_name", type: STRING, isNullable: false },
        { columnName: "taco_total_price", type: FLOAT, isNullable: false },
        { columnName: "order_item_id", type: STRING, isNullable: false },
        { columnName: "tortilla_id", type: STRING, isNullable: false },
        { columnName: "toppings", type: JSON, isNullable: false },
        { columnName: "sauce_id", type: STRING, isNullable: false },
        { columnName: "taco_unit_price", type: FLOAT, isNullable: false },
        { columnName: "order_id", type: STRING, isNullable: false },
        { columnName: "order_item_generated_at", type: TIMESTAMP, isNullable: false },
        { columnName: "taco_id", type: STRING, isNullable: false },
        { columnName: "timestamp", type: TIMESTAMP, isNullable: false },
        { columnName: "tortilla_name", type: STRING, isNullable: false }
      ]
      accessControlEnabled: true
      tableSettings: {
        engine: {
          mergeTree: {
            type: MERGE_TREE
          }
        }
        orderBy: ["timestamp"]
      }
    }
  ) {
    dataPool {
      id
      uniqueName
      accessControlEnabled
      description
      tableSettings {
        orderBy
      }
    }
  }
}