"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1676],{15680:(e,t,n)=>{n.d(t,{xA:()=>p,yg:()=>g});var r=n(96540);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 s(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 l=r.createContext({}),d=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=d(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=d(n),u=o,g=c["".concat(l,".").concat(u)]||c[u]||m[u]||a;return n?r.createElement(g,i(i({ref:t},p),{},{components:n})):r.createElement(g,i({ref:t},p))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var d=2;d<a;d++)i[d]=n[d];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},76883:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>g,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var r=n(58168),o=n(98587),a=(n(96540),n(15680)),i=["components"],s={id:"insert-segment-to-db",title:"insert-segment-to-db tool"},l=void 0,d={unversionedId:"operations/insert-segment-to-db",id:"operations/insert-segment-to-db",title:"insert-segment-to-db tool",description:"\x3c!--",source:"@site/docs/29.0.0/operations/insert-segment-to-db.md",sourceDirName:"operations",slug:"/operations/insert-segment-to-db",permalink:"/docs/29.0.0/operations/insert-segment-to-db",draft:!1,tags:[],version:"current",frontMatter:{id:"insert-segment-to-db",title:"insert-segment-to-db tool"},sidebar:"docs",previous:{title:"reset-cluster tool",permalink:"/docs/29.0.0/operations/reset-cluster"},next:{title:"pull-deps tool",permalink:"/docs/29.0.0/operations/pull-deps"}},p={},c=[],m={toc:c},u="wrapper";function g(e){var t=e.components,n=(0,o.A)(e,i);return(0,a.yg)(u,(0,r.A)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("p",null,"In older versions of Apache Druid, ",(0,a.yg)("inlineCode",{parentName:"p"},"insert-segment-to-db")," was a tool that could scan deep storage and\ninsert data from there into Druid metadata storage. It was intended to be used to update the segment table in the\nmetadata storage after manually migrating segments from one place to another, or even to recover lost metadata storage\nby telling it where the segments are stored."),(0,a.yg)("p",null,"In Druid 0.14.x and earlier, Druid wrote segment metadata to two places: the metadata store's ",(0,a.yg)("inlineCode",{parentName:"p"},"druid_segments")," table, and\n",(0,a.yg)("inlineCode",{parentName:"p"},"descriptor.json")," files in deep storage. This practice was stopped in Druid 0.15.0 as part of\n",(0,a.yg)("a",{parentName:"p",href:"https://github.com/apache/druid/issues/6849"},"consolidated metadata management"),", for the following reasons:"),(0,a.yg)("ol",null,(0,a.yg)("li",{parentName:"ol"},"If any segments are manually dropped or re-enabled by cluster operators, this information is not reflected in\ndeep storage. Restoring metadata from deep storage would undo any such drops or re-enables."),(0,a.yg)("li",{parentName:"ol"},"Ingestion methods that allocate segments optimistically (such as native Kafka or Kinesis stream ingestion, or native\nbatch ingestion in 'append' mode) can write segments to deep storage that are not meant to actually be used by the\nDruid cluster. There is no way, while purely looking at deep storage, to differentiate the segments that made it into\nthe metadata store originally (and therefore ",(0,a.yg)("em",{parentName:"li"},"should")," be used) from the segments that did not (and therefore\n",(0,a.yg)("em",{parentName:"li"},"should not")," be used)."),(0,a.yg)("li",{parentName:"ol"},"Nothing in Druid other than the ",(0,a.yg)("inlineCode",{parentName:"li"},"insert-segment-to-db")," tool read the ",(0,a.yg)("inlineCode",{parentName:"li"},"descriptor.json")," files.")),(0,a.yg)("p",null,"After this change, Druid stopped writing ",(0,a.yg)("inlineCode",{parentName:"p"},"descriptor.json")," files to deep storage, and now only writes segment metadata\nto the metadata store. This meant the ",(0,a.yg)("inlineCode",{parentName:"p"},"insert-segment-to-db")," tool is no longer useful, so it was removed in Druid 0.15.0."),(0,a.yg)("p",null,"It is highly recommended that you take regular backups of your metadata store, since it is difficult to recover Druid\nclusters properly without it."))}g.isMDXComponent=!0}}]);