{"id":"VU0kmvnWzctSFm2M","meta":{"instanceId":"workflow-fed4e900","versionId":"1.0.0","createdAt":"2025-09-29T07:07:46.736268","updatedAt":"2025-09-29T07:07:46.736294","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"name":"Convert Parquet, Avro, ORC & Feather via ParquetReader to JSON","nodes":[{"id":"651a10dc-1c91-4957-bcdd-3e55d7328f04","name":"Send to Parquet API","type":"n8n-nodes-base.httpRequest","position":[1100,440],"parameters":{"url":"{{ $env.API_BASE_URL }}","options":{"bodyContentType":"multipart-form-data"},"requestMethod":"POST","jsonParameters":true,"sendBinaryData":true,"binaryPropertyName":"=file0"},"typeVersion":1,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"42a7e623-ca11-4d38-94bb-cfb48d021a5c","name":"Webhook","type":"n8n-nodes-base.webhook","notes":"Example trigger flow:\n\ncurl -X POST {{ $env.WEBHOOK_URL }} \\\n  -F \"file=@converted.parquet\"","position":[900,440],"webhookId":"0b1223c9-c117-45f9-9931-909f2db28955","parameters":{"path":"convert","options":{"binaryPropertyName":"file"},"httpMethod":"POST","responseData":"allEntries","responseMode":"lastNode"},"notesInFlow":false,"typeVersion":2},{"id":"9b87f027-7ef2-40a7-88d7-a0ae9ef73375","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[0,0],"parameters":{"width":840,"height":580,"content":"### ✅ **How to Use This Flow**\n\n#### 📥 Trigger via File Upload\n\nYou can trigger this flow by sending a `POST` request with a file using **curl**, **Postman**, or **from another n8n flow**.\n\n#### 🔧 Example (via `curl`):\n```bash\ncurl -X POST {{ $env.WEBHOOK_URL }} \\\n-F \"file=@converted.parquet\"\n```\n> Replace `converted.parquet` with your local file path. You can also send Avro, ORC or Feather files.\n\n#### 🔁 Reuse from Other Flows\nYou can **reuse this flow** by calling the webhook from another n8n workflow using an **HTTP Request** node.  \nMake sure to send the file as **form-data** with the field name `file`.\n\n#### 🔍 What This Flow Does:\n- Receives the uploaded file via webhook (`file`)\n- Sends it to `{{ $env.API_BASE_URL }}` as `multipart/form-data` (field name: `file`)\n- Receives parsed data, schema, and metadata\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"06d3e569-8724-48f2-951f-a1af5e0f9362","name":"Parse API Response","type":"n8n-nodes-base.code","position":[1280,440],"parameters":{"jsCode":"const item = items[0];\n\n// Convert `data` (stringified JSON array) → actual array\nif (typeof item.json.data === 'string') {\n  item.json.data = JSON.parse(item.json.data);\n}\n\n// Convert `meta_data` (stringified JSON object) → actual object\nif (typeof item.json.meta_data === 'string') {\n  item.json.meta_data = JSON.parse(item.json.meta_data);\n}\n\nreturn [item];\n"},"typeVersion":2,"notes":"This code node performs automated tasks as part of the workflow."}],"active":true,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"c10e1897-094e-42c6-bde9-1724972ada3e","connections":{"Send to Parquet API":{"main":[[],[],[],[],[]]},"Webhook":{"main":[[],[],[],[],[]]}},"description":"Automated workflow: Convert Parquet, Avro, ORC & Feather via ParquetReader to JSON. This workflow integrates 5 different services: webhook, stickyNote, httpRequest, code, stopAndError. It contains 8 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Convert Parquet, Avro, ORC & Feather via ParquetReader to JSON. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}