Skip to content

Quick Start

Dataframe workflow

function quickstartDataFrame() {
  const ASTX = ASTLib.AST || ASTLib;

  const df = ASTX.DataFrame.fromRecords([
    { id: 1, region: 'east', amount: 10 },
    { id: 2, region: 'west', amount: 25 },
    { id: 3, region: 'east', amount: 5 }
  ]);

  const transformed = df
    .assign({
      amount_x2: frame => frame.amount.multiply(2),
      bucket: frame => frame.amount.apply(v => (v >= 20 ? 'high' : 'normal'))
    })
    .sort('amount', false);

  Logger.log(transformed.toMarkdown());
}

Column-first workflow (fast path)

function quickstartFromColumns() {
  const ASTX = ASTLib.AST || ASTLib;

  const df = ASTX.DataFrame.fromColumns({
    id: [1, 2, 3],
    region: ['east', 'west', 'east'],
    amount: [10, 25, 5]
  });

  Logger.log(df.toMarkdown());
}

Grouped aggregation

function quickstartGroupBy() {
  const ASTX = ASTLib.AST || ASTLib;

  const df = ASTX.DataFrame.fromRecords([
    { region: 'east', amount: 10 },
    { region: 'west', amount: 25 },
    { region: 'east', amount: 5 }
  ]);

  const grouped = df.groupBy(['region']).agg({ amount: ['sum', 'mean'] });
  Logger.log(grouped.toMarkdown());
}

SQL query workflow

function quickstartBigQuery() {
  const ASTX = ASTLib.AST || ASTLib;

  const prepared = ASTX.Sql.prepare({
    provider: 'bigquery',
    sql: 'select {{value}} as ok',
    paramsSchema: {
      value: 'integer'
    },
    parameters: {
      projectId: 'my-gcp-project'
    }
  });

  const result = ASTX.Sql.executePrepared({
    statementId: prepared.statementId,
    params: {
      value: 1
    }
  });

  Logger.log(result.dataFrame.toMarkdown());
}

Utility usage

function quickstartUtils() {
  const ASTX = ASTLib.AST || ASTLib;

  const total = ASTX.Utils.arraySum([1, 2, 3, 4]);
  const nextWeek = ASTX.Utils.dateAdd(new Date('2026-01-01T00:00:00Z'), 7, 'days');

  Logger.log(total);      // 10
  Logger.log(nextWeek);   // 2026-01-08T00:00:00.000Z
}

Jobs workflow

function quickstartJobs() {
  const ASTX = ASTLib.AST || ASTLib;

  const queued = ASTX.Jobs.enqueue({
    name: 'quickstart-job',
    steps: [
      { id: 'step_one', handler: 'quickstartStepOne' },
      { id: 'step_two', handler: 'quickstartStepTwo', dependsOn: ['step_one'] }
    ]
  });

  const result = ASTX.Jobs.resume(queued.id);
  Logger.log(result.status);
}

function quickstartStepOne() {
  return { ok: true };
}

function quickstartStepTwo(context) {
  return { previous: context.results.step_one };
}

AI text workflow

function quickstartAi() {
  const ASTX = ASTLib.AST || ASTLib;

  const response = ASTX.AI.text({
    provider: 'openai',
    input: 'Write a one-line summary of this week\\'s metrics.'
  });

  Logger.log(response.output.text);
}

RAG grounded Q&A workflow

function quickstartRagAnswer() {
  const ASTX = ASTLib.AST || ASTLib;

  const out = ASTX.RAG.answer({
    indexFileId: 'YOUR_INDEX_FILE_ID',
    question: 'What are the key milestones?',
    generation: {
      provider: 'openai'
    },
    options: {
      requireCitations: true
    }
  });

  Logger.log(out.status);
  Logger.log(out.answer);
  Logger.log(out.citations);
}

Large dataset best practices

  • prefer DataFrame.fromColumns(...) when data is already columnar.
  • avoid repeated toRecords() inside loops.
  • use dropDuplicates(['key1', 'key2']) instead of full-row dedupe when possible.
  • run npm run test:perf before large refactors that affect dataframe internals.
  • for RAG indexing, cap maxChunks and re-sync incrementally instead of full rebuilds on every edit.