Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Map data type in UI #14245

Merged
merged 1 commit into from
Oct 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
22 changes: 14 additions & 8 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 @@ -380,18 +380,24 @@ const getListingSchemaList = () => {
})
};

const allSchemaDetailsColumnHeader = ["Schema Name", "Dimension Columns", "Date-Time Columns", "Metrics Columns", "Total Columns"];
const allSchemaDetailsColumnHeader = ["Schema Name", "Dimension Columns", "Date-Time Columns", "Metrics Columns", "Complex Columns", "Total Columns"];

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
Loading