Workbook: Initiate Materialization Job (JavaScript)
Workbook: Initiate Materialization Job (JavaScript)
This script demonstrates how to start an existing materialization job, for a specified workbook and retrieves its status until the job is complete.
Refer to the Sigma REST API Recipes QuickStart for step-by-step instructions.
Example script
JavaScript
// This script starts a materialization job for a specified workbook and retrieves its status// 1: Load environment variables from a specific .env file for configurationrequire('dotenv').config({ path: 'sigma-api-recipes/.env' });// 2: Import the function to obtain a bearer token from the authenticate-bearer moduleconst getBearerToken = require('../get-access-token');// 3: Import Axios for making HTTP requestsconst axios = require('axios');// 4: Load use-case specific variables from environment variablesconst baseURL = process.env.baseURL; // Your base URLconst workbookId = process.env.WORKBOOK_ID; // Workbook ID for materialization// Function to start a materialization jobasync function startMaterialization() {try {const accessToken = await getBearerToken();if (!accessToken) {console.error('Failed to obtain Bearer token.');return;}// Fetch materialization schedules to get the correct sheet IDconst materializationSchedulesURL = `${baseURL}/workbooks/${workbookId}/materialization-schedules`;console.log(`URL sent to Sigma: ${materializationSchedulesURL}`);const response = await axios.get(materializationSchedulesURL, {headers: {'Authorization': `Bearer ${accessToken}`}});// Parse the sheet ID from the response if schedules are availableconst materializationSchedules = response.data.entries;if (materializationSchedules.length === 0) {console.error('No materialization schedules found for the specified workbook.');return;}const sheetId = materializationSchedules[0].sheetId;console.log(`Starting materialization job for workbook ${workbookId} and sheet ${sheetId}...`);const materializationsURL = `${baseURL}/workbooks/${workbookId}/materializations`;console.log(`URL sent to Sigma: ${materializationsURL}`);const startResponse = await axios.post(materializationsURL, {sheetId: sheetId}, {headers: {'Authorization': `Bearer ${accessToken}`,'Content-Type': 'application/json'}});console.log('Materialization job started successfully:', startResponse.data);// Retrieve materialization statusconst materializationId = startResponse.data.materializationId; // Correctly extract the materialization IDawait checkMaterializationStatus(materializationId, accessToken, materializationsURL);} catch (error) {console.error('Error starting materialization job:', error.response ? error.response.data : error);}}// Function to check materialization statusasync function checkMaterializationStatus(materializationId, accessToken, materializationsURL) {try {const materializationStatusURL = `${materializationsURL}/${materializationId}`;console.log(`URL sent to Sigma: ${materializationStatusURL}`);console.log(`Checking materialization status for materialization ID: ${materializationId}`);const response = await axios.get(materializationStatusURL, {headers: {'Authorization': `Bearer ${accessToken}`}});console.log('Materialization status:', response.data.status);// Check if the materialization status is "ready"if (response.data.status === 'ready') {console.log('Materialization job completed successfully.');return; // Stop the script execution}// Check status periodically until it's either completed or failedif (response.data.status !== 'COMPLETE' && response.data.status !== 'FAILED') {await new Promise(resolve => setTimeout(resolve, 5000)); // Wait for 5 secondsawait checkMaterializationStatus(materializationId, accessToken, materializationsURL);}} catch (error) {console.error('Error checking materialization status:', error.response ? error.response.data : error);}}// Execute the scriptstartMaterialization();
Endpoints used
- Get authentication token:
getBearerTokenfunction - List materialization schedules:
${baseURL}/workbooks/${workbookId}/materialization-schedules - Start a materialization job:
${baseURL}/workbooks/${workbookId}/materializations - Check status of a materialization job:
${baseURL}/workbooks/${workbookId}/materializations/${materializationId}

