UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

29 lines 5.49 kB
import { col, lit } from "nodejs-polars"; import { denormalizeField } from "../field/index.js"; import { getPolarsSchema } from "../schema/index.js"; const HEAD_ROWS = 100; export async function denormalizeTable(table, schema, options) { const head = await table.head(HEAD_ROWS).collect(); const polarsSchema = getPolarsSchema(head.schema); return table.select(...Object.values(denormalizeFields(schema, polarsSchema, options))); } export function denormalizeFields(schema, polarsSchema, options) { const { nativeTypes } = options ?? {}; const exprs = {}; for (const field of schema.fields) { const polarsField = polarsSchema.fields.find(f => f.name === field.name); let expr = lit(null).alias(field.name); if (polarsField) { expr = col(polarsField.name).alias(field.name); // TODO: Move this logic to denormalizeField? if (!nativeTypes?.includes(field.type ?? "any")) { const missingValues = field.missingValues ?? schema.missingValues; const mergedField = { ...field, missingValues }; expr = denormalizeField(mergedField, expr); } } exprs[field.name] = expr; } return exprs; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVub3JtYWxpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90YWJsZS9kZW5vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFHcEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFBO0FBTXJCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEtBQVksRUFDWixNQUFjLEVBQ2QsT0FBaUM7SUFFakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ2xELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFakQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUNqQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUNuRSxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLE9BQWlDO0lBRWpDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ3JDLE1BQU0sS0FBSyxHQUF5QixFQUFFLENBQUE7SUFFdEMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4RSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV0QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFOUMsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFBO2dCQUNqRSxNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFBO2dCQUMvQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQzVDLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUE7SUFDMUIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIFNjaGVtYSB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5pbXBvcnQgeyBjb2wsIGxpdCB9IGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB0eXBlIHsgRXhwciB9IGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IGRlbm9ybWFsaXplRmllbGQgfSBmcm9tIFwiLi4vZmllbGQvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBQb2xhcnNTY2hlbWEgfSBmcm9tIFwiLi4vc2NoZW1hL2luZGV4LnRzXCJcbmltcG9ydCB7IGdldFBvbGFyc1NjaGVtYSB9IGZyb20gXCIuLi9zY2hlbWEvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBUYWJsZSB9IGZyb20gXCIuL1RhYmxlLnRzXCJcblxuY29uc3QgSEVBRF9ST1dTID0gMTAwXG5cbnR5cGUgRGVub3JtYWxpemVUYWJsZU9wdGlvbnMgPSB7XG4gIG5hdGl2ZVR5cGVzPzogRXhjbHVkZTxGaWVsZFtcInR5cGVcIl0sIHVuZGVmaW5lZD5bXVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVub3JtYWxpemVUYWJsZShcbiAgdGFibGU6IFRhYmxlLFxuICBzY2hlbWE6IFNjaGVtYSxcbiAgb3B0aW9ucz86IERlbm9ybWFsaXplVGFibGVPcHRpb25zLFxuKSB7XG4gIGNvbnN0IGhlYWQgPSBhd2FpdCB0YWJsZS5oZWFkKEhFQURfUk9XUykuY29sbGVjdCgpXG4gIGNvbnN0IHBvbGFyc1NjaGVtYSA9IGdldFBvbGFyc1NjaGVtYShoZWFkLnNjaGVtYSlcblxuICByZXR1cm4gdGFibGUuc2VsZWN0KFxuICAgIC4uLk9iamVjdC52YWx1ZXMoZGVub3JtYWxpemVGaWVsZHMoc2NoZW1hLCBwb2xhcnNTY2hlbWEsIG9wdGlvbnMpKSxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVub3JtYWxpemVGaWVsZHMoXG4gIHNjaGVtYTogU2NoZW1hLFxuICBwb2xhcnNTY2hlbWE6IFBvbGFyc1NjaGVtYSxcbiAgb3B0aW9ucz86IERlbm9ybWFsaXplVGFibGVPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHsgbmF0aXZlVHlwZXMgfSA9IG9wdGlvbnMgPz8ge31cbiAgY29uc3QgZXhwcnM6IFJlY29yZDxzdHJpbmcsIEV4cHI+ID0ge31cblxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNjaGVtYS5maWVsZHMpIHtcbiAgICBjb25zdCBwb2xhcnNGaWVsZCA9IHBvbGFyc1NjaGVtYS5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQubmFtZSlcbiAgICBsZXQgZXhwciA9IGxpdChudWxsKS5hbGlhcyhmaWVsZC5uYW1lKVxuXG4gICAgaWYgKHBvbGFyc0ZpZWxkKSB7XG4gICAgICBleHByID0gY29sKHBvbGFyc0ZpZWxkLm5hbWUpLmFsaWFzKGZpZWxkLm5hbWUpXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBsb2dpYyB0byBkZW5vcm1hbGl6ZUZpZWxkP1xuICAgICAgaWYgKCFuYXRpdmVUeXBlcz8uaW5jbHVkZXMoZmllbGQudHlwZSA/PyBcImFueVwiKSkge1xuICAgICAgICBjb25zdCBtaXNzaW5nVmFsdWVzID0gZmllbGQubWlzc2luZ1ZhbHVlcyA/PyBzY2hlbWEubWlzc2luZ1ZhbHVlc1xuICAgICAgICBjb25zdCBtZXJnZWRGaWVsZCA9IHsgLi4uZmllbGQsIG1pc3NpbmdWYWx1ZXMgfVxuICAgICAgICBleHByID0gZGVub3JtYWxpemVGaWVsZChtZXJnZWRGaWVsZCwgZXhwcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHByc1tmaWVsZC5uYW1lXSA9IGV4cHJcbiAgfVxuXG4gIHJldHVybiBleHByc1xufVxuIl19