Skip to content

Commit

Permalink
Support for Map data type in UI
Browse files Browse the repository at this point in the history
  • Loading branch information
esakkiraj committed Oct 18, 2024
1 parent 4220d09 commit 7b045c5
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 12 deletions.
22 changes: 20 additions & 2 deletions pinot-controller/src/main/resources/app/components/Table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,16 @@ export default function CustomizedTables({
} else {
const filteredRescords = initialData.records.filter((record) => {
const searchFound = record.find(
(cell) => cell.toString().toLowerCase().indexOf(str) > -1
(cell) => {
let strigifiedData;
try {
strigifiedData = JSON.stringify(get(cell, 'value') || cell)
} catch(e) {
strigifiedData = cell.toString()
}

return strigifiedData.toLowerCase().indexOf(str) > -1
}
);
if (searchFound) {
return true;
Expand Down Expand Up @@ -462,8 +471,17 @@ export default function CustomizedTables({
{styleCell(cellData.value)}
</Tooltip>
);
} else {
} else if(has(cellData, 'value') && cellData.value) {
return styleCell(cellData.value);
} else {
try {
const stringifiedJSON = JSON.stringify(cellData)
return stringifiedJSON
} catch(e) {
// If the data is corrupted and not recognizable by JSON.stringify, fallback to below error message instead
// of crashing the whole page for the user.
return '<DATA COULD NOT BE PARSED TO DISPLAY>'
}
}
}
return styleCell(cellData.toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ declare module 'Models' {
customRenderer: JSX.Element
}

export type MapRecord = Record<string, unknown>

export type TableData = {
records: Array<Array<string | number | boolean | SegmentStatus | LoadingRecord>>;
records: Array<Array<string | number | boolean | MapRecord | SegmentStatus | LoadingRecord>>;
columns: Array<string>;
error?: string;
isLoading? : boolean
Expand Down Expand Up @@ -130,6 +132,7 @@ declare module 'Models' {
dimensionFieldSpecs: Array<schema>;
metricFieldSpecs?: Array<schema>;
dateTimeFieldSpecs?: Array<schema>;
complexFieldSpecs?: Array<schema>,
error?: string;
code?: number;
};
Expand All @@ -145,6 +148,7 @@ declare module 'Models' {
numDimensionFields: number
numDateTimeFields: number
numMetricFields: number
numComplexFields: number
};

export type SQLResult = {
Expand Down
18 changes: 11 additions & 7 deletions pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import jwtDecode from "jwt-decode";
import { get, map, each, isEqual, isArray, keys, union } from 'lodash';
import { DataTable, SegmentMetadata, SqlException, SQLResult, TableSize } from 'Models';
import { DataTable, SchemaInfo, SegmentMetadata, SqlException, SQLResult, TableSize } from 'Models';
import moment from 'moment';
import {
getTenants,
Expand Down Expand Up @@ -384,14 +384,18 @@ const allSchemaDetailsColumnHeader = ["Schema Name", "Dimension Columns", "Date-

const getAllSchemaDetails = async (schemaList) => {
let schemaDetails:Array<any> = [];
const results = await getSchemaDataInfo();
const results:SchemaInfo[] = await getSchemaDataInfo();
schemaDetails = results.map((obj)=>{
let schemaObj = [];
schemaObj.push(obj.schemaName);
schemaObj.push(obj.numDimensionFields);
schemaObj.push(obj.numDateTimeFields);
schemaObj.push(obj.numMetricFields);
schemaObj.push(schemaObj[1] + schemaObj[2] + schemaObj[3]);
const { numDimensionFields, numDateTimeFields, numComplexFields, numMetricFields, schemaName} = obj;
schemaObj.push(schemaName);
schemaObj.push(numDimensionFields);
schemaObj.push(numDateTimeFields);
schemaObj.push(numMetricFields);
schemaObj.push(numComplexFields)
const totalColumns = numDimensionFields + numMetricFields + numDateTimeFields + numComplexFields;
schemaObj.push(totalColumns);

return schemaObj;
})
return {
Expand Down
11 changes: 9 additions & 2 deletions pinot-controller/src/main/resources/app/utils/Utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { map, isEqual, findIndex, findLast } from 'lodash';
import app_state from '../app_state';
import {
DISPLAY_SEGMENT_STATUS, InstanceType,
MapRecord,
PinotTableDetails,
SEGMENT_STATUS,
SegmentStatus,
Expand Down Expand Up @@ -64,7 +65,7 @@ const pinotTableDetailsFormat = (tableDetails: PinotTableDetails): Array<string
];
}

const pinotTableDetailsFromArray = (tableDetails: Array<string | number | boolean | SegmentStatus | { customRenderer: JSX.Element }>): PinotTableDetails => {
const pinotTableDetailsFromArray = (tableDetails: Array<string | number | boolean | MapRecord | SegmentStatus | { customRenderer: JSX.Element }>): PinotTableDetails => {
return {
name: tableDetails[0] as string,
estimated_size: tableDetails[1] as string,
Expand Down Expand Up @@ -300,6 +301,7 @@ const syncTableSchemaData = (data, showFieldType) => {
const dimensionFields = data.dimensionFieldSpecs || [];
const metricFields = data.metricFieldSpecs || [];
const dateTimeField = data.dateTimeFieldSpecs || [];
const complexFields = data.complexFieldSpecs || [];

dimensionFields.map((field) => {
field.fieldType = 'Dimension';
Expand All @@ -312,7 +314,12 @@ const syncTableSchemaData = (data, showFieldType) => {
dateTimeField.map((field) => {
field.fieldType = 'Date-Time';
});
const columnList = [...dimensionFields, ...metricFields, ...dateTimeField];

complexFields.map((field) => {
field.fieldType = 'Complex'
})

const columnList = [...dimensionFields, ...metricFields, ...dateTimeField, ...complexFields];
if (showFieldType) {
return {
columns: ['Column', 'Type', 'Field Type', 'Multi Value'],
Expand Down

0 comments on commit 7b045c5

Please sign in to comment.