[{"data":1,"prerenderedAt":761},["ShallowReactive",2],{"navigation_docs":3,"-develop-import-your-data":388,"-develop-import-your-data-surround":756},[4,82,147,173,202,259,298,355],{"title":5,"icon":6,"redirect":7,"path":8,"stem":9,"children":10,"page":73},"Start","i-lucide-compass","\u002Fintro\u002Fquickstart","\u002Fintro","1.intro",[11,14,18,22,74,78],{"title":12,"path":7,"stem":13},"Quickstart","1.intro\u002F0.quickstart",{"title":15,"path":16,"stem":17},"Pipeline Applications","\u002Fintro\u002Fpipeline-app-walkthrough","1.intro\u002F1.pipeline-app-walkthrough",{"title":19,"path":20,"stem":21},"How Redgold works","\u002Fintro\u002Foverview","1.intro\u002F2.overview",{"title":23,"icon":24,"visibility":25,"redirect":26,"path":27,"stem":28,"children":29,"page":73},"Comparison","i-lucide-scale","private","\u002Fintro\u002Fcomparison\u002Fpositioning","\u002Fintro\u002Fcomparison","1.intro\u002F3.comparison",[30,33,37,41,45,49,53,57,61,65,69],{"title":31,"path":26,"stem":32},"Positioning","1.intro\u002F3.comparison\u002F1.positioning",{"title":34,"path":35,"stem":36},"vs Lovable","\u002Fintro\u002Fcomparison\u002Fvs-lovable","1.intro\u002F3.comparison\u002F10.vs-lovable",{"title":38,"path":39,"stem":40},"vs Cloudflare OS","\u002Fintro\u002Fcomparison\u002Fvs-cloudflare-os","1.intro\u002F3.comparison\u002F11.vs-cloudflare-os",{"title":42,"path":43,"stem":44},"vs a backend-as-a-service","\u002Fintro\u002Fcomparison\u002Fvs-baas","1.intro\u002F3.comparison\u002F2.vs-baas",{"title":46,"path":47,"stem":48},"vs serverless compute","\u002Fintro\u002Fcomparison\u002Fvs-serverless-compute","1.intro\u002F3.comparison\u002F3.vs-serverless-compute",{"title":50,"path":51,"stem":52},"vs a do-it-yourself data stack","\u002Fintro\u002Fcomparison\u002Fvs-diy-data-stack","1.intro\u002F3.comparison\u002F4.vs-diy-data-stack",{"title":54,"path":55,"stem":56},"vs Rama","\u002Fintro\u002Fcomparison\u002Fvs-rama","1.intro\u002F3.comparison\u002F5.vs-rama",{"title":58,"path":59,"stem":60},"vs Apache Spark","\u002Fintro\u002Fcomparison\u002Fvs-spark","1.intro\u002F3.comparison\u002F6.vs-spark",{"title":62,"path":63,"stem":64},"vs Apache DataFusion","\u002Fintro\u002Fcomparison\u002Fvs-datafusion","1.intro\u002F3.comparison\u002F7.vs-datafusion",{"title":66,"path":67,"stem":68},"vs Heroku","\u002Fintro\u002Fcomparison\u002Fvs-heroku","1.intro\u002F3.comparison\u002F8.vs-heroku",{"title":70,"path":71,"stem":72},"vs AI model providers","\u002Fintro\u002Fcomparison\u002Fvs-ai-providers","1.intro\u002F3.comparison\u002F9.vs-ai-providers",false,{"title":75,"path":76,"stem":77},"Common tasks","\u002Fintro\u002Fstarting-points","1.intro\u002F4.starting-points",{"title":79,"path":80,"stem":81},"FAQ","\u002Fintro\u002Ffaq","1.intro\u002F5.faq",{"title":83,"icon":84,"redirect":85,"path":86,"stem":87,"children":88,"page":73},"Examples","i-lucide-chef-hat","\u002Fcookbook\u002Foverview","\u002Fcookbook","10.cookbook",[89,91,95,99,103,107,111,115,119,123,127,131,135,139,143],{"title":83,"path":85,"stem":90},"10.cookbook\u002F1.overview",{"title":92,"path":93,"stem":94},"One-shot task in CI","\u002Fcookbook\u002Fone-shot-ci","10.cookbook\u002F10.one-shot-ci",{"title":96,"path":97,"stem":98},"Rate-limit retries","\u002Fcookbook\u002Fretry-rate-limits","10.cookbook\u002F11.retry-rate-limits",{"title":100,"path":101,"stem":102},"Connect GitHub review automation","\u002Fcookbook\u002Fconnect-github-app","10.cookbook\u002F12.connect-github-app",{"title":104,"path":105,"stem":106},"Delegate a task to another agent","\u002Fcookbook\u002Fdelegate-agent-task","10.cookbook\u002F13.delegate-agent-task",{"title":108,"path":109,"stem":110},"Validate a pipeline application change","\u002Fcookbook\u002Fvalidate-pipeline-app","10.cookbook\u002F14.validate-pipeline-app",{"title":112,"path":113,"stem":114},"Verify a managed application deployment","\u002Fcookbook\u002Fverify-managed-deploy","10.cookbook\u002F15.verify-managed-deploy",{"title":116,"path":117,"stem":118},"First API call","\u002Fcookbook\u002Ffirst-api-call","10.cookbook\u002F2.first-api-call",{"title":120,"path":121,"stem":122},"Python client","\u002Fcookbook\u002Fmodel-api-python","10.cookbook\u002F3.model-api-python",{"title":124,"path":125,"stem":126},"Anthropic Messages","\u002Fcookbook\u002Fanthropic-messages","10.cookbook\u002F4.anthropic-messages",{"title":128,"path":129,"stem":130},"Check credits","\u002Fcookbook\u002Fcheck-credits","10.cookbook\u002F5.check-credits",{"title":132,"path":133,"stem":134},"Query data via MCP","\u002Fcookbook\u002Fmcp-query-data","10.cookbook\u002F6.mcp-query-data",{"title":136,"path":137,"stem":138},"Drive an agent via MCP","\u002Fcookbook\u002Fmcp-drive-agent","10.cookbook\u002F7.mcp-drive-agent",{"title":140,"path":141,"stem":142},"Install the client","\u002Fcookbook\u002Finstall-client","10.cookbook\u002F8.install-client",{"title":144,"path":145,"stem":146},"Use another API host","\u002Fcookbook\u002Fpoint-client-at-host","10.cookbook\u002F9.point-client-at-host",{"title":148,"icon":149,"redirect":150,"path":151,"stem":152,"children":153,"page":73},"Agent operations","i-lucide-network","\u002Ffleet\u002Foverview","\u002Ffleet","11.fleet",[154,157,161,165,169],{"title":155,"path":150,"stem":156},"Running agent work","11.fleet\u002F0.overview",{"title":158,"path":159,"stem":160},"Workstreams and issues","\u002Ffleet\u002Fworkstreams-and-issues","11.fleet\u002F1.workstreams-and-issues",{"title":162,"path":163,"stem":164},"Agent lifecycle","\u002Ffleet\u002Fagent-lifecycle","11.fleet\u002F2.agent-lifecycle",{"title":166,"path":167,"stem":168},"Supervision and recovery","\u002Ffleet\u002Fsupervision","11.fleet\u002F3.supervision",{"title":170,"path":171,"stem":172},"An application workstream from request to delivery","\u002Ffleet\u002Fapplication-workstream","11.fleet\u002F4.application-workstream",{"title":174,"icon":175,"redirect":176,"path":177,"stem":178,"children":179,"page":73},"Architecture","i-lucide-layers","\u002Finfrastructure\u002Foverview","\u002Finfrastructure","3.infrastructure",[180,182,186,190,194,198],{"title":174,"path":176,"stem":181},"3.infrastructure\u002F0.overview",{"title":183,"path":184,"stem":185},"A request through the platform","\u002Finfrastructure\u002Frequest-path","3.infrastructure\u002F11.request-path",{"title":187,"path":188,"stem":189},"Agent work and durable state","\u002Finfrastructure\u002Fagent-work","3.infrastructure\u002F12.agent-work",{"title":191,"path":192,"stem":193},"Data and pipelines","\u002Finfrastructure\u002Fdata","3.infrastructure\u002F3.data",{"title":195,"path":196,"stem":197},"AI and agents","\u002Finfrastructure\u002Fai","3.infrastructure\u002F4.ai",{"title":199,"path":200,"stem":201},"Managed deployment","\u002Finfrastructure\u002Fdeployment","3.infrastructure\u002F7.deployment",{"title":203,"icon":204,"redirect":205,"path":206,"stem":207,"children":208,"page":73},"API","i-lucide-book-marked","\u002Freference\u002Fauthentication","\u002Freference","4.reference",[209,212,216,220,224,228,232,236,240,244,248],{"title":210,"path":205,"stem":211},"Authentication","4.reference\u002F1.authentication",{"title":213,"path":214,"stem":215},"Security disclosure policy","\u002Freference\u002Fsecurity-disclosure","4.reference\u002F11.security-disclosure",{"title":217,"path":218,"stem":219},"Model API","\u002Freference\u002Fllm-api","4.reference\u002F2.llm-api",{"title":221,"path":222,"stem":223},"MCP server","\u002Freference\u002Fmcp","4.reference\u002F2.mcp",{"title":225,"path":226,"stem":227},"Data platform preview","\u002Freference\u002Fdata-platform-preview","4.reference\u002F3.data-platform-preview",{"title":229,"path":230,"stem":231},"Terminal client","\u002Freference\u002Fcli","4.reference\u002F6.cli",{"title":233,"path":234,"stem":235},"Pipeline manifest preview","\u002Freference\u002Fpipeline-preview","4.reference\u002F7.pipeline-preview",{"title":237,"path":238,"stem":239},"Limits and retries","\u002Freference\u002Flimits","4.reference\u002F8.limits",{"title":241,"path":242,"stem":243},"API contract details","\u002Freference\u002Fapi-contracts","4.reference\u002F9.api-contracts",{"title":245,"path":246,"stem":247},"Errors","\u002Freference\u002Ferrors","4.reference\u002F9.errors",{"title":249,"icon":250,"visibility":251,"path":252,"stem":253,"children":254,"page":73},"Public API","i-lucide-route","public","\u002Freference\u002Froutes","4.reference\u002Froutes",[255],{"title":256,"path":257,"stem":258},"V1 routes","\u002Freference\u002Froutes\u002Fv1","4.reference\u002Froutes\u002Fv1",{"title":260,"icon":261,"visibility":25,"redirect":262,"path":263,"stem":264,"children":265,"page":73},"Develop","i-lucide-code","\u002Fdevelop\u002Fpipeline-apps\u002Foverview","\u002Fdevelop","5.develop",[266,270,286,290,294],{"title":267,"path":268,"stem":269},"Author a batch transform","\u002Fdevelop\u002Fauthor-a-batch-transform","5.develop\u002F10.author-a-batch-transform",{"title":271,"visibility":251,"redirect":262,"path":272,"stem":273,"children":274,"page":73},"Pipeline Apps","\u002Fdevelop\u002Fpipeline-apps","5.develop\u002F11.pipeline-apps",[275,278,282],{"title":276,"path":262,"stem":277},"Pipeline apps","5.develop\u002F11.pipeline-apps\u002F1.overview",{"title":279,"path":280,"stem":281},"Collaborative board walkthrough","\u002Fdevelop\u002Fpipeline-apps\u002Fcollaborative-board","5.develop\u002F11.pipeline-apps\u002F2.collaborative-board",{"title":283,"path":284,"stem":285},"Release and security lifecycle","\u002Fdevelop\u002Fpipeline-apps\u002Frelease-lifecycle","5.develop\u002F11.pipeline-apps\u002F3.release-lifecycle",{"title":287,"path":288,"stem":289},"Build a vertical","\u002Fdevelop\u002Fbuild-a-vertical","5.develop\u002F5.build-a-vertical",{"title":291,"path":292,"stem":293},"Managed application artifacts","\u002Fdevelop\u002Fscaffold-a-narrow-app","5.develop\u002F7.scaffold-a-narrow-app",{"title":295,"path":296,"stem":297},"Import your data","\u002Fdevelop\u002Fimport-your-data","5.develop\u002F8.import-your-data",{"title":299,"icon":300,"redirect":301,"path":302,"stem":303,"children":304,"page":73},"Guides","i-lucide-layout-grid","\u002Fapplications\u002Fai-agents\u002Foverview","\u002Fapplications","7.applications",[305,309,329,341],{"title":306,"path":307,"stem":308},"Application maturity catalog","\u002Fapplications\u002Fcatalog","7.applications\u002F0.catalog",{"title":310,"visibility":251,"path":311,"stem":312,"children":313,"page":73},"AI Agents","\u002Fapplications\u002Fai-agents","7.applications\u002F1.ai-agents",[314,317,321,325],{"title":315,"path":301,"stem":316},"Coding agents","7.applications\u002F1.ai-agents\u002F01.overview",{"title":318,"path":319,"stem":320},"GitHub App automation","\u002Fapplications\u002Fai-agents\u002Fgithub-app-automation","7.applications\u002F1.ai-agents\u002F04.github-app-automation",{"title":322,"path":323,"stem":324},"agent-cli assistance","\u002Fapplications\u002Fai-agents\u002Fagent-cli-assistance","7.applications\u002F1.ai-agents\u002F05.agent-cli-assistance",{"title":326,"path":327,"stem":328},"Agent REST control","\u002Fapplications\u002Fai-agents\u002Frest-agent-control","7.applications\u002F1.ai-agents\u002F06.rest-agent-control",{"title":330,"visibility":251,"path":331,"stem":332,"children":333,"page":73},"Tickets","\u002Fapplications\u002Ftickets","7.applications\u002F2.tickets",[334,337],{"title":330,"path":335,"stem":336},"\u002Fapplications\u002Ftickets\u002Foverview","7.applications\u002F2.tickets\u002F01.overview",{"title":338,"path":339,"stem":340},"API walkthrough","\u002Fapplications\u002Ftickets\u002Fapi-walkthrough","7.applications\u002F2.tickets\u002F02.api-walkthrough",{"title":342,"icon":343,"visibility":251,"path":344,"stem":345,"children":346,"page":73},"Case studies","i-lucide-book-open-check","\u002Fapplications\u002Fcase-studies","7.applications\u002F6.case-studies",[347,351],{"title":348,"path":349,"stem":350},"Case study: owner-scoped tickets","\u002Fapplications\u002Fcase-studies\u002Ftickets","7.applications\u002F6.case-studies\u002F01.tickets",{"title":352,"path":353,"stem":354},"Case study: repository review and correction","\u002Fapplications\u002Fcase-studies\u002Frepository-review","7.applications\u002F6.case-studies\u002F02.repository-review",{"title":356,"icon":357,"redirect":358,"path":359,"stem":360,"children":361,"page":73},"Resources","i-lucide-library","\u002Fresources\u002Fglossary","\u002Fresources","9.resources",[362,365,369,373,377,380,384],{"title":363,"path":358,"stem":364},"Glossary","9.resources\u002F1.glossary",{"title":366,"path":367,"stem":368},"Terms of Service","\u002Fresources\u002Fterms","9.resources\u002F2.terms",{"title":370,"path":371,"stem":372},"Privacy Policy","\u002Fresources\u002Fprivacy","9.resources\u002F3.privacy",{"title":374,"path":375,"stem":376},"Acceptable Use Policy","\u002Fresources\u002Facceptable-use","9.resources\u002F4.acceptable-use",{"title":79,"path":378,"stem":379},"\u002Fresources\u002Ffaq","9.resources\u002F5.faq",{"title":381,"path":382,"stem":383},"Documentation feedback","\u002Fresources\u002Fdocs-feedback","9.resources\u002F6.docs-feedback",{"title":385,"path":386,"stem":387},"Refund and Cancellation Policy","\u002Fresources\u002Frefund-cancellation","9.resources\u002F7.refund-cancellation",{"id":389,"title":295,"access":390,"audience":391,"body":392,"description":747,"extension":748,"last_verified":749,"links":750,"maturity":751,"meta":752,"navigation":753,"path":296,"seo":754,"stem":297,"__hash__":755},"docs\u002F5.develop\u002F8.import-your-data.md","onboarding","developer",{"type":393,"value":394,"toc":738},"minimark",[395,399,411,420,425,428,439,448,452,458,462,465,469,492,502,506,518,522,525,595,624,630,636,640,643,720,723,727,734],[396,397,398],"p",{},"Every other onboarding path assumes data is born inside the platform: a collector\npulls it, an agent produces it, a pipeline writes it. This page is for the other\ncase — you already have a dataset (a directory of JSONL, a Parquet export, a\nPostgres table) and want it queryable here.",[396,400,401,402,406,407,410],{},"The honest state today: there is no first-class bulk file-upload route. You do not\n",[403,404,405],"code",{},"POST"," a CSV and get a dataset back, and there is no generic ",[403,408,409],{},"rac des import \u003Cfile>","\nverb. What exists is the write path every in-platform producer already uses — typed\nrows through the data engine — plus the query surface to read them back. Importing\nyour data means mapping it onto a checked-in Rust serde record and driving it through one of the\nwrite paths below. That mapping is not overhead you can skip: the engine stores\ntyped, content-addressed rows, not opaque blobs, so a schema is the price of entry\nand also what makes the data queryable, prunable, and joinable afterward.",[396,412,413,414,419],{},"The biggest gap — a first-class file-import route so a tenant can hand the platform\na Parquet or JSONL file directly — is tracked as\n",[415,416,418],"a",{"href":417},"#planned-first-class-file-import","planned work","; this page documents what runs now.",[421,422,424],"h2",{"id":423},"the-shape-of-an-import","The shape of an import",[396,426,427],{},"Whichever write path you pick, the middle step is the same and is the real work:\nturn each source record into one Rust serde record.",[396,429,430,431,434,435,438],{},"Follow the raw-plus-per-record split described in\n",[415,432,287],{"href":433},"\u002Fdevelop\u002Fbuild-a-vertical#1-define-the-rust-native-schema-types",". One raw\nserde type mirrors the source payload as-is (a whole CSV row, one JSON object, one\nParquet row group's logical record); a second, per-record message flattens it into\nexactly one row per logical event. If your source hands back \"an array of readings\nat N timestamps in one object\", the raw message keeps the array and the per-record\nmessage is one reading at one timestamp. Add these under\n",[403,436,437],{},"crates\u002Fshared\u002Fschema\u002F\u003Cyourdomain>\u002F",". Everything downstream — the write, the\npartition pruning, the query — keys off that per-record type.",[440,441,442,443,447],"note",{},"CSV and Parquet do not carry a Rust schema, so you author it. JSONL that already\nmatches a record type's field names deserializes with far less glue. This is why the\n",[415,444,446],{"href":445},"#format-matrix","format matrix"," rates JSONL as the lowest-friction source even\nthough none of the four formats has a one-command path.",[421,449,451],{"id":450},"path-a-define-a-managed-app-with-an-upsert-route-recommended","Path A — define a managed app with an upsert route (recommended)",[396,453,454,455,457],{},"For a dataset you own and will keep writing to, define the record shape,\ntransform, and narrow read\u002Fwrite routes as one managed application contract.\n",[415,456,291],{"href":292}," describes the\nschema, pipeline TOML, transform, tests, and API contract that stay visible in\nGit. During the preview, Redgold coordinates the initial repository shape and\ndataset name with the customer.",[459,460,461],"caution",{},"Redgold provisions the dataset, validates the pipeline artifact, and publishes\nthe routes through the managed deployment path after the customer approves the\nGit change. The route becomes part of the application contract after that\ndeployment and its bounded smoke verification.",[396,463,464],{},"This is the right choice when the import is recurring or the dataset is yours\nlong-term: you get a stable route, a named dataset, and the read surface for free.",[421,466,468],{"id":467},"path-b-the-general-signed-transaction-write","Path B — the general signed-transaction write",[396,470,471,472,475,476,479,480,483,484,487,488,491],{},"The platform-wide write chokepoint is ",[403,473,474],{},"POST \u002Fapi\u002Fquery\u002Ftransaction\u002Fsubmit",". It takes\na canonical-CBOR-encoded, signed ",[403,477,478],{},"SubmitTransactionRequest"," — your rows ride inside a\n",[403,481,482],{},"Transaction"," as ",[403,485,486],{},"TransactionRecordElement","s, one per record, each carrying a\n",[403,489,490],{},"PrimaryKeyId",". This is the path the UI and every in-platform producer use, and it\nis available now without a deploy step, but it is a programmatic path: you construct\nand sign the transaction with the SDK or native client because the engine verifies\nthe signature over the exact CBOR bytes.",[396,493,494,495,497,498,501],{},"Reach for this when you are writing a one-off batch from your own code and do not\nwant to stand up an app. The record-element registration and ",[403,496,490],{},"\nconstruction are the same ones documented in\n",[415,499,287],{"href":500},"\u002Fdevelop\u002Fbuild-a-vertical#2-define-the-dataset-reference",".",[421,503,505],{"id":504},"path-c-a-collector-for-recurring-external-sources","Path C — a collector, for recurring external sources",[396,507,508,509,512,513,517],{},"If the data is not a static file you hold but a live external source (an API, a feed,\na websocket) you will pull repeatedly, write a collector under\n",[403,510,511],{},"crates\u002Fdata\u002Fdaq\u002F\u003Csource>\u002F"," instead of importing by hand. That is the Rust schema → raw\nJSONL → typed record → Lance path in\n",[415,514,516],{"href":515},"\u002Fdevelop\u002Fbuild-a-vertical#3-ingestion-crate-if-applicable","Build a vertical §3",",\nand it gives you backfill plus live ingestion in one dataset. This is import as an\nongoing pipeline rather than a one-time load.",[421,519,521],{"id":520},"verify-the-write-landed","Verify the write landed",[396,523,524],{},"In a managed Redgold development environment, the operator can authenticate as\nthe maintained public synthetic principal, list its datasets, and query rows\nback:",[526,527,532],"pre",{"className":528,"code":529,"language":530,"meta":531,"style":531},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","eval \"$(rac auth jwt --role public)\"   # mints DATA_ENGINE_JWT for the redgold.ai audience\nrac des datasets                        # datasets your principal owns\nrac des sql \"select * from \u003Cyour_dataset> limit 1\"\n","bash","",[403,533,534,562,576],{"__ignoreMap":531},[535,536,539,543,547,551,555,558],"span",{"class":537,"line":538},"line",1,[535,540,542],{"class":541},"s2Zo4","eval",[535,544,546],{"class":545},"sMK4o"," \"$(",[535,548,550],{"class":549},"sBMFI","rac",[535,552,554],{"class":553},"sfazB"," auth jwt --role public",[535,556,557],{"class":545},")\"",[535,559,561],{"class":560},"sHwdD","   # mints DATA_ENGINE_JWT for the redgold.ai audience\n",[535,563,565,567,570,573],{"class":537,"line":564},2,[535,566,550],{"class":549},[535,568,569],{"class":553}," des",[535,571,572],{"class":553}," datasets",[535,574,575],{"class":560},"                        # datasets your principal owns\n",[535,577,579,581,583,586,589,592],{"class":537,"line":578},3,[535,580,550],{"class":549},[535,582,569],{"class":553},[535,584,585],{"class":553}," sql",[535,587,588],{"class":545}," \"",[535,590,591],{"class":553},"select * from \u003Cyour_dataset> limit 1",[535,593,594],{"class":545},"\"\n",[396,596,597,600,601,604,605,608,609,612,613,616,617,620,621,623],{},[403,598,599],{},"rac des datasets"," is owner-scoped: a fresh principal that has not written anything\nsees ",[403,602,603],{},"{\"datasets\": []}",", which is the expected empty state, not an error. ",[403,606,607],{},"rac des sql","\nlowers a ",[403,610,611],{},"SELECT"," to a dataflow and runs it against the ",[403,614,615],{},"FROM"," dataset over the\nDES request adapter, rendering rows as JSON — this is the reliable read-back and the\none to use in a verification loop. Projection-style ",[403,618,619],{},"rac des query --dataset ...","\nexists as well, but resolves a narrower set of datasets, so prefer ",[403,622,607],{}," when\nconfirming an import.",[396,625,626,629],{},[403,627,628],{},"rac auth jwt --role public"," uses repository-managed browser state for the\nsynthetic public test identity. It is an operator verification command rather\nthan customer API-key authentication. Customers verify an onboarded dataset\nthrough the approved application's read route after managed publication.",[440,631,632,635],{},[403,633,634],{},"rac des submit"," looks like a generic import verb but is deliberately scoped to two\ninternal bench datasets; pointing it at any other dataset is rejected. It is not a\ndata-import path — use Path A or Path B.",[421,637,639],{"id":638},"format-matrix","Format matrix",[396,641,642],{},"None of the four common source formats has a first-class one-command import today.\nEach maps onto the paths above; the difference is how much glue the format costs\nbefore it becomes typed rows.",[644,645,646,662],"table",{},[647,648,649],"thead",{},[650,651,652,656,659],"tr",{},[653,654,655],"th",{},"Format",[653,657,658],{},"Status today",[653,660,661],{},"How you get it in",[663,664,665,681,692,710],"tbody",{},[650,666,667,671,674],{},[668,669,670],"td",{},"JSONL",[668,672,673],{},"Workaround, lowest friction",[668,675,676,677,680],{},"One JSON object per line already matches the per-record shape. Deserialize each line into your Rust record type (the checked-in types carry serde derives) and write via Path A or B. Raw JSONL is also the native on-disk format the ",[415,678,679],{"href":515},"collector path"," saves.",[650,682,683,686,689],{},[668,684,685],{},"CSV",[668,687,688],{},"Workaround",[668,690,691],{},"No first-class CSV support. Convert rows to JSONL (or read them directly in a small write program), map each to the per-record Rust type, then as JSONL above. Header names become your record fields.",[650,693,694,697,699],{},[668,695,696],{},"Parquet",[668,698,688],{},[668,700,701,702,706,707,501],{},"Parquet\u002FArrow is the platform's own cold-tier lake format via Rust schema → Arrow → Lance, but there is no route that ingests ",[703,704,705],"em",{},"your"," Parquet file. Read it, map row → per-record Rust type, write via Path A or B. A first-class Parquet import is the ",[415,708,709],{"href":417},"planned gap",[650,711,712,715,717],{},[668,713,714],{},"Postgres dump",[668,716,688],{},[668,718,719],{},"No first-class table-import path for tenant data (the engine's own Postgres hot tier is written by the platform, not opened for bulk tenant loads). Export the table to JSONL or Parquet, then follow those rows.",[396,721,722],{},"The through-line: every cell routes to \"map to a per-record Rust type, then write via\nPath A or B.\" The schema authoring is the actual import work; the write mechanics are\nalready there.",[421,724,726],{"id":725},"planned-first-class-file-import","Planned: first-class file import",[396,728,729,730,733],{},"The missing piece is a route that takes a file — Parquet or JSONL first — plus a\ntarget dataset and does the map-and-write for you, so a tenant with an existing\nexport does not have to scaffold an app or write an SDK program. This is filed as a\nbacklog issue (",[403,731,732],{},"2026-07-17-first-class-file-import-route","); until it lands, the paths\nabove are the supported ways in.",[735,736,737],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":531,"searchDepth":564,"depth":564,"links":739},[740,741,742,743,744,745,746],{"id":423,"depth":564,"text":424},{"id":450,"depth":564,"text":451},{"id":467,"depth":564,"text":468},{"id":504,"depth":564,"text":505},{"id":520,"depth":564,"text":521},{"id":638,"depth":564,"text":639},{"id":725,"depth":564,"text":726},"Getting an existing dataset — CSV, JSONL, Parquet, or a Postgres table — into the platform, what works today, and how to verify the write landed.","md","2026-08-14",null,"preview",{"toc":753,"visibility":251},true,{"title":295,"description":747},"elW6XA74vYggRct7QfLqTdHmHYuJsbyxSQ1nFyqslGU",[757,759],{"title":291,"path":292,"stem":293,"description":758,"children":-1},"The schema, pipeline TOML, Rust transform, tests, and API contract reviewed for a managed pipeline application.",{"title":306,"path":307,"stem":308,"description":760,"children":-1},"Generated status and access summary for the public Redgold application documentation.",1789873213247]