The new shard spec On Fri, Jan 11, 2019 at 8:37 AM Gian Merlino <g...@apache.org> wrote:
> Do you mean the modifications to the metamx/druid-spark-batch project or > the new ShardSpec you're working on? > > On Thu, Jan 10, 2019 at 3:09 PM Julian Jaffe <jja...@pinterest.com.invalid > > > wrote: > > > Thanks for the detailed pointers, Gian! In light of the ongoing > discussion > > around on-list development, does this seem like something that's > worthwhile > > to anyone else in the community? > > > > On Tue, Jan 8, 2019 at 10:32 AM Gian Merlino <g...@apache.org> wrote: > > > > > Hey Julian, > > > > > > There aren't any gotchas that I can think of other than the fact that > > they > > > are not super well documented, and you might miss some features if > you're > > > just skimming the code. A couple points that might matter, > > > > > > 1) PartitionChunk is what allows a shard spec to contribute to the > > > definition of whether a set of segments for a time chunk is "complete". > > > It's an important concept since the broker will not query segment sets > > > unless the chunk is complete. The way the completeness check works is > > > basically that the broker will get all the ShardSpecs for all the > > segments > > > in a time chunk, order them by partitionNum, generate the partition > > chunks, > > > and check if (a) the first one is a starter based on "isStart", (b) any > > > subsequent ones until the end [based on "isEnd"] abut the previous one > > > [based on "abuts"]. Some ShardSpecs use nonsensical-at-first-glance > logic > > > from these methods to short circuit the completeness checks: time > chunks > > > with LinearShardSpecs are _always_ considered complete. Time chunks > with > > > NumberedShardSpecs can have "partitionNum" go beyond "partitions", and > > are > > > considered complete if the first "partitions" number of segments are > > > present. > > > > > > 2) "getDomainDimensions" and "possibleInDomain" are optional, but > useful > > > for powering broker-side segment pruning. > > > > > > 3) All segments in the same time chunk must have the same kind of > > > ShardSpec. However, it can vary from time chunk to time chunk within a > > > datasource. > > > > > > On Mon, Jan 7, 2019 at 2:56 PM Julian Jaffe > <jja...@pinterest.com.invalid > > > > > > wrote: > > > > > > > Hey all, > > > > > > > > Are there any major caveats or gotchas I should be aware of when > > > > implementing a new ShardSpec? The context here is that we have a > > > datasource > > > > that is the combined result of multiple input jobs. We're trying to > do > > > > write-side joining by having all of the jobs write segments for the > > same > > > > intervals (e.g. partitioning on both partition number and source > > > pipeline). > > > > For now, I've modified the Spark-Druid batch ingestor ( > > > > https://github.com/metamx/druid-spark-batch) to run in our various > > > > pipelines and to write out segments with identifier form > > > > > `dataSource_startInterval_endInterval_version_sourceName_partitionNum. > > > This > > > > is working without issue for loading, querying, and deleting data, > but > > > the > > > > metadata API reports the incorrect segment identifier, since it > > > > reconstructs the identifier instead of reading from metadata (e.g. it > > > > reports segment identifiers of the form > > > > `dataSource_startInterval_endInterval_version_partitionNum`). Both > > > because > > > > we'd like this to be fully supported, and because we imagine that > this > > > > feature may be useful to others, I'd like to implement this via a > > > > ShardSpec. > > > > > > > > Julian > > > > > > > > > >