"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4209],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),d=c(n),f=o,m=d["".concat(s,".").concat(f)]||d[f]||l[f]||a;return n?r.createElement(m,i(i({ref:t},u),{},{components:n})):r.createElement(m,i({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=f;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[d]="string"==typeof e?e:o,i[1]=p;for(var c=2;c<a;c++)i[c]=n[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},45666:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>p,metadata:()=>c,toc:()=>d});var r=n(87462),o=n(63366),a=(n(67294),n(3905)),i=["components"],p={id:"parquet",title:"Apache Parquet Extension"},s=void 0,c={unversionedId:"development/extensions-core/parquet",id:"development/extensions-core/parquet",title:"Apache Parquet Extension",description:"\x3c!--",source:"@site/docs/27.0.0/development/extensions-core/parquet.md",sourceDirName:"development/extensions-core",slug:"/development/extensions-core/parquet",permalink:"/docs/27.0.0/development/extensions-core/parquet",draft:!1,tags:[],version:"current",frontMatter:{id:"parquet",title:"Apache Parquet Extension"}},u={},d=[],l={toc:d},f="wrapper";function m(e){var t=e.components,n=(0,o.Z)(e,i);return(0,a.kt)(f,(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This Apache Druid module extends ",(0,a.kt)("a",{parentName:"p",href:"/docs/27.0.0/ingestion/hadoop"},"Druid Hadoop based indexing")," to ingest data directly from offline\nApache Parquet files."),(0,a.kt)("p",null,"Note: If using the ",(0,a.kt)("inlineCode",{parentName:"p"},"parquet-avro")," parser for Apache Hadoop based indexing, ",(0,a.kt)("inlineCode",{parentName:"p"},"druid-parquet-extensions")," depends on the ",(0,a.kt)("inlineCode",{parentName:"p"},"druid-avro-extensions")," module, so be sure to\n",(0,a.kt)("a",{parentName:"p",href:"/docs/27.0.0/configuration/extensions#loading-extensions"},"include  both"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"druid-parquet-extensions")," provides the ",(0,a.kt)("a",{parentName:"p",href:"/docs/27.0.0/ingestion/data-formats#parquet"},"Parquet input format"),", the ",(0,a.kt)("a",{parentName:"p",href:"/docs/27.0.0/ingestion/data-formats#parquet-hadoop-parser"},"Parquet Hadoop parser"),",\nand the ",(0,a.kt)("a",{parentName:"p",href:"/docs/27.0.0/ingestion/data-formats#parquet-avro-hadoop-parser"},"Parquet Avro Hadoop Parser")," with ",(0,a.kt)("inlineCode",{parentName:"p"},"druid-avro-extensions"),".\nThe Parquet input format is available for ",(0,a.kt)("a",{parentName:"p",href:"/docs/27.0.0/ingestion/native-batch"},"native batch ingestion"),"\nand the other 2 parsers are for ",(0,a.kt)("a",{parentName:"p",href:"/docs/27.0.0/ingestion/hadoop"},"Hadoop batch ingestion"),".\nPlease see corresponding docs for details."))}m.isMDXComponent=!0}}]);