Skip to content

Commit c39cd32

Browse files
committed
Project should show * on selected fields
1 parent e64a239 commit c39cd32

File tree

3 files changed

+55
-9
lines changed

3 files changed

+55
-9
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.dataflint.example
2+
3+
import org.apache.spark.sql.{SparkSession, functions => F}
4+
5+
object ProjectExample extends App {
6+
val spark = SparkSession
7+
.builder()
8+
.appName("Select ETL")
9+
.config("spark.plugins", "io.dataflint.spark.SparkDataflintPlugin")
10+
.config("spark.ui.port", "10000")
11+
.master("local[*]")
12+
.getOrCreate()
13+
14+
val salesFilesLocation = sys.env.getOrElse("SALES_FILES_LOCATION", throw new Exception("SALES_FILES_LOCATION env var not set"))
15+
16+
val df = spark.read.load(salesFilesLocation)
17+
18+
df.count()
19+
20+
scala.io.StdIn.readLine("job ended, press any key to continue..")
21+
22+
spark.stop()
23+
}
24+

spark-ui/src/components/SqlFlow/StageNode.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -422,11 +422,18 @@ export const StageNode: FC<{
422422
break;
423423
case "Project":
424424
if (parsedPlan.plan.fields !== undefined) {
425-
addTruncatedCodeTooltipMultiline(
426-
dataTable,
427-
"Selected Fields",
428-
parsedPlan.plan.fields,
429-
);
425+
if (parsedPlan.plan.fields.length === 0) {
426+
dataTable.push({
427+
name: "Selected Fields",
428+
value: "*",
429+
});
430+
} else {
431+
addTruncatedCodeTooltipMultiline(
432+
dataTable,
433+
"Selected Fields",
434+
parsedPlan.plan.fields,
435+
);
436+
}
430437
}
431438
break;
432439
case "HashAggregate":

spark-ui/src/reducers/PlanParsers/ProjectParser.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,24 @@ import { ParsedProjectPlan } from "../../interfaces/AppStore";
22
import { bracedSplit, hashNumbersRemover } from "./PlanParserUtils";
33

44
export function parseProject(input: string): ParsedProjectPlan {
5-
const fieldsStr = hashNumbersRemover(
6-
input.replace("Project [", "").replace("PhotonProject [", "").replace("GpuProject [", "").slice(0, -1),
7-
);
8-
const fields = bracedSplit(fieldsStr).map((field) => field.trim());
5+
// If the input is just "Project", "PhotonProject", or "GpuProject", return empty fields
6+
if (input === "Project" || input === "PhotonProject" || input === "GpuProject") {
7+
return { fields: [] };
8+
}
9+
10+
let fieldsStr = input;
11+
// Remove the project type and opening bracket in the correct order
12+
if (fieldsStr.startsWith("PhotonProject [")) {
13+
fieldsStr = fieldsStr.replace("PhotonProject [", "");
14+
} else if (fieldsStr.startsWith("GpuProject [")) {
15+
fieldsStr = fieldsStr.replace("GpuProject [", "");
16+
} else if (fieldsStr.startsWith("Project [")) {
17+
fieldsStr = fieldsStr.replace("Project [", "");
18+
}
19+
20+
// Remove the closing bracket and hash numbers
21+
fieldsStr = hashNumbersRemover(fieldsStr.slice(0, -1));
22+
23+
const fields = bracedSplit(fieldsStr).map((field) => field.trim()).filter((field) => field.length > 0);
924
return { fields: fields };
1025
}

0 commit comments

Comments
 (0)