@openfn/language-motherduck
v1.0.5
Published
OpenFn MotherDuck cloud database adaptor
Keywords
Readme
Language MotherDuck
OpenFn Adaptor for building expressions and operations to interact with MotherDuck, the serverless cloud analytics platform powered by DuckDB.
Configuration
{
"token": "your_motherduck_token_here",
"database": "my_database"
}With session hint for read scaling:
{
"token": "your_motherduck_token_here",
"database": "my_database",
"sessionHint": "primary"
}Sample Expressions
Execute SQL queries
query('SELECT * FROM users WHERE age > 25');
query(`
SELECT
COUNT(*) as total_users,
AVG(age) as average_age
FROM users
WHERE created_at >= '2024-01-01'
`);Insert data
insert('users', {
name: 'John Doe',
age: 30,
email: '[email protected]',
});
insertMany('users', [
{ name: 'Alice', age: 28, email: '[email protected]' },
{ name: 'Bob', age: 35, email: '[email protected]' },
]);Create and manage tables
createTable('analytics', [
{ name: 'id', type: 'INTEGER PRIMARY KEY' },
{ name: 'event_name', type: 'VARCHAR(100)', required: true },
{ name: 'timestamp', type: 'TIMESTAMP', default: 'CURRENT_TIMESTAMP' },
{ name: 'user_id', type: 'INTEGER' },
]);
dropTable('old_table', { ifExists: true });Data transformation pipeline
// Extract: Query source data
query('SELECT * FROM raw_events WHERE processed = false');
// Transform: Process the data
map($.data, event => ({
...event,
processed_at: new Date().toISOString(),
category: event.type === 'click' ? 'engagement' : 'other',
}));
// Load: Insert processed data
insertMany('processed_events', state => state.data);
// Mark as processed
query('UPDATE raw_events SET processed = true WHERE processed = false');Development
Clone the adaptors monorepo. Follow the "Getting Started" guide inside to get set up.
Run tests using pnpm run test or pnpm run test:watch
Build the project using pnpm build.
