UNPKG

@forzalabs/remora

Version:

A powerful CLI tool for seamless data translation.

254 lines 9.18 kB
{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Producer Schema", "description": "Schema for defining data producers", "type": "object", "properties": { "$schema": { "type": "string", "format": "uri" }, "name": { "type": "string", "description": "The name of the producer" }, "description": { "type": "string", "description": "Optional description of the producer" }, "source": { "type": "string", "description": "The name of the Source" }, "dimensions": { "type": "array", "description": "Dimensions for the producer", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the dimension" }, "description": { "type": "string", "description": "Optional description of the dimension" }, "type": { "type": "string", "enum": [ "string", "number", "datetime" ], "description": "The data type of the dimension" }, "alias": { "type": "string", "description": "The SQL column or field key that corresponds to this dimension. If left empty, the column name is assumed to be the same as the dimension name" }, "pk": { "type": "boolean", "description": "Whether this is a primary key column or not" }, "classification": { "type": "array", "items": { "type": "string", "enum": [ "PHI", "PII", "GDPR" ], "description": "Classification categories for this dimension" } }, "mask": { "type": "string", "enum": [ "hash", "mask", "crypt", "random", "seeded-random" ], "description": "Masking type to apply to this dimension. 'hash' replaces with a hashed value. 'mask' replaces characters with a mask character. 'crypt' encrypts the value. 'random' replaces with a random value. 'seeded-random' replaces with a random value generated from a seed." } }, "required": [ "name", "type" ], "additionalProperties": false }, "minItems": 1 }, "measures": { "type": "array", "description": "Optional measures for the producer", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the measure" }, "description": { "type": "string", "description": "Optional description of the measure" }, "sql": { "type": "string", "description": "SQL command used to create a metric" } }, "required": [ "name", "sql" ], "additionalProperties": false } }, "settings": { "type": "object", "description": "Settings for the producer", "properties": { "sqlTable": { "type": "string", "description": "The SQL table name, which is a concise way of setting the sql property to 'SELECT * FROM <sql table name>'" }, "direct": { "type": "boolean", "description": "If true, no view is created on the producer side due to permission limitations" }, "sql": { "type": "string", "description": "The name of the file that has the SQL statement to run to create this producer" }, "fileKey": { "type": "string", "description": "If the source is a bucket, this is the file key that identifies the file to read" }, "fileType": { "type": "string", "enum": [ "JSON", "JSONL", "CSV", "TXT", "XLS", "XLSX", "XML" ], "description": "The type of file to read" }, "delimiter": { "type": "string", "description": "The column delimiter for CSV or TXT files if different from the default (,)." }, "hasHeaderRow": { "type": "boolean", "description": "For TXT files, specifies whether the file has a header row containing column names. Defaults to true." }, "sheetName": { "type": "string", "description": "For Excel files (.xls/.xlsx), specifies the name of the sheet to read data from. If not specified, the first sheet will be used." } }, "additionalProperties": false }, "_version": { "type": "number", "description": "Version number of the producer configuration" } }, "required": [ "name", "source", "dimensions", "settings", "_version" ], "additionalProperties": false, "examples": [ { "name": "CustomerData", "description": "Producer for customer data from the main database", "source": "Production PostgreSQL Database", "dimensions": [ { "name": "customer_id", "type": "string", "pk": true }, { "name": "full_name", "type": "string", "classification": [ "PII", "GDPR" ], "mask": "hash" }, { "name": "email", "type": "string", "classification": [ "PII", "GDPR" ], "mask": "mask" }, { "name": "signup_date", "type": "datetime" } ], "measures": [ { "name": "total_orders", "description": "Total number of orders by this customer", "sql": "COUNT(order_id)" }, { "name": "total_spent", "description": "Total amount spent by this customer", "sql": "SUM(order_amount)" } ], "settings": { "sqlTable": "customers" }, "_version": 1 }, { "name": "SalesData", "description": "Producer for sales data from S3 bucket", "source": "Data Lake", "dimensions": [ { "name": "transaction_id", "type": "string", "pk": true }, { "name": "product_id", "type": "string" }, { "name": "sale_amount", "type": "number" }, { "name": "sale_date", "type": "datetime" } ], "settings": { "fileKey": "sales/daily_sales.csv", "fileType": "CSV" }, "_version": 2 } ] }