```const clientId = data.clid; const customerId ...
# general
a
Copy code
const clientId = data.clid;
  const customerId = data.cid;
  const sessionId = data.sid;
  const dataString = JSON.stringify(data);

  // Prepare the data to be ingested into Druid
  const druidData = JSON.stringify([
    {
      clientId,
      customerId,
      sessionId,
      data: dataString,
    },
  ]);
  const ingestionSpec = {
    type: "index",
    spec: {
      dataSchema: {
        dataSource: "device-hbs",
        timestampSpec: {
          column: "sst",
          format: "auto",
        },
        dimensionsSpec: {
          dimensions: [
            { name: "clientId", type: "string" },
            { name: "customerId", type: "string" },
            { name: "sessionId", type: "string" },
            { name: "data", type: "string" },
          ],
        },
        metricsSpec: [],
        granularitySpec: {
          type: "uniform",
          segmentGranularity: "HOUR",
          queryGranularity: "none",
          rollup: false,
          intervals: [],
        },
        transformSpec: {
          filter: null,
          transforms: [],
        },
      },
      ioConfig: {
        type: "index",
        inputSource: {
          type: "inline",
          data: druidData,
        },
        inputFormat: {
          type: "json",
        },
        appendToExisting: false,
        dropExisting: false,
      },
      tuningConfig: {
        type: "index",
        maxRowsPerSegment: null,
        appendableIndexSpec: {
          type: "onheap",
          preserveExistingMetrics: false,
        },
        maxRowsInMemory: 1000000,
        maxBytesInMemory: 0,
        skipBytesInMemoryOverheadCheck: false,
        maxTotalRows: null,
        numShards: null,
        partitionDimensions: [],
        partitionsSpec: null,
        indexSpec: {
          bitmap: {
            type: "roaring",
            compressRunOnSerialization: true,
          },
          dimensionCompression: "lz4",
          stringDictionaryEncoding: {
            type: "utf8",
          },
          metricCompression: "lz4",
          longEncoding: "longs",
        },
        indexSpecForIntermediatePersists: {
          bitmap: {
            type: "roaring",
            compressRunOnSerialization: true,
          },
          dimensionCompression: "lz4",
          stringDictionaryEncoding: {
            type: "utf8",
          },
          metricCompression: "lz4",
          longEncoding: "longs",
        },
        maxPendingPersists: 0,
        forceGuaranteedRollup: false,
        reportParseExceptions: false,
        pushTimeout: 0,
        segmentWriteOutMediumFactory: null,
        logParseExceptions: false,
        maxParseExceptions: 2147483647,
        maxSavedParseExceptions: 0,
        maxColumnsToMerge: -1,
        awaitSegmentAvailabilityTimeoutMillis: 0,
      },
    },
    context: {
      forceTimeChunkLock: true,
      useLineageBasedSegmentAllocation: true,
    },
  };