Skip to content

Commit b8a609d

Browse files
committed
Support Hive table engine
1 parent 284f735 commit b8a609d

7 files changed

Lines changed: 123 additions & 14 deletions

File tree

src/renderer/assets/i18n/en.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,5 +306,15 @@
306306
},
307307
"formatter": {
308308
"migrate_data": "Need to migrate {0} data, please confirm whether to migrate?"
309+
},
310+
"engine": {
311+
"table": {
312+
"hive": {
313+
"description": "The Hive engine allows you to perform SELECT quries on HDFS Hive table.",
314+
"uri": "Hive Metastore address, egg: thrift://host:port",
315+
"database": "Remote database name",
316+
"table": "Remote table name"
317+
}
318+
}
309319
}
310320
}

src/renderer/assets/i18n/zh.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,5 +307,15 @@
307307
},
308308
"formatter": {
309309
"migrate_data": "需要迁移{0}条数据, 请确认是否迁移?"
310+
},
311+
"engine": {
312+
"table": {
313+
"hive": {
314+
"description": "The Hive engine allows you to perform SELECT quries on HDFS Hive table.",
315+
"uri": "Hive Metastore address, egg: thrift://host:port",
316+
"database": "Remote database name",
317+
"table": "Remote table name"
318+
}
319+
}
310320
}
311321
}

src/renderer/components/table/create/table.create.component.html

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@
5454
<nz-form-item>
5555
<nz-form-label [nzSm]="6" [nzXs]="24">{{'common.name'|translate}}</nz-form-label>
5656
<nz-form-control [nzSm]="14" [nzXs]="24">
57-
<input (change)="handlerValidate()" [(ngModel)]="configure.targetName" name="name" nz-input
57+
<input (change)="handlerValidateStep('Basic')" [(ngModel)]="configure.targetName" name="name" nz-input
5858
type="text"/>
5959
</nz-form-control>
6060
</nz-form-item>
6161
</nz-tab>
6262
<!-- Column Settings -->
63-
<nz-tab [nzTitle]="columnSettingTemplate">
63+
<nz-tab [nzDisabled]="!validated.basic" [nzTitle]="columnSettingTemplate">
6464
<ng-template #columnSettingTemplate>
6565
<i nz-icon nzType="delete-column"></i>
6666
{{'common.column'|translate}}
@@ -78,7 +78,7 @@
7878
<div [nzSpan]="8" nz-col>
7979
<input [(ngModel)]="column.name" nz-input type="text" [ngModelOptions]="{standalone: true}"
8080
placeholder="{{'common.column'|translate}}{{'common.name'|translate}}"
81-
style="width: 100%;"/>
81+
(ngModelChange)="handlerValidateStep('Column')" style="width: 100%;"/>
8282
</div>
8383
<div [nzSpan]="6" nz-col>
8484
<nz-select [(ngModel)]="column.type" [ngModelOptions]="{standalone: true}"
@@ -110,7 +110,8 @@
110110
</div>
111111
</nz-tab>
112112
<!-- Properties Settings -->
113-
<nz-tab *ngIf="configure.properties?.length > 0" [nzTitle]="propertySettingTemplate">
113+
<nz-tab *ngIf="configure.properties?.length > 0" [nzDisabled]="!validated.column"
114+
[nzTitle]="propertySettingTemplate">
114115
<ng-template #propertySettingTemplate>
115116
<i nz-icon nzType="property-safety"></i>
116117
{{'common.property'|translate}}
@@ -130,6 +131,24 @@
130131
(emitter)="handlerComponentEmitter($event, false)">
131132
</app-component-property>
132133
</nz-tab>
134+
<!-- Partition Settings -->
135+
<nz-tab *ngIf="configure.partitionConfigure?.enable" [nzDisabled]="!validated.property"
136+
[nzTitle]="partitionSettingTemplate">
137+
<ng-template #partitionSettingTemplate>
138+
<i nz-icon nzType="partition"></i>
139+
{{'common.partition'|translate}}
140+
</ng-template>
141+
<nz-form-item>
142+
<nz-form-label [nzSm]="6" [nzXs]="24">{{'common.column'|translate}}</nz-form-label>
143+
<nz-form-control [nzSm]="14" [nzXs]="24">
144+
<nz-select nzMode="multiple" [(ngModel)]="configure.partitionConfigure.columns"
145+
[ngModelOptions]="{standalone: true}">
146+
<nz-option *ngFor="let column of columns" [nzLabel]="column.name"
147+
[nzValue]="column.name"></nz-option>
148+
</nz-select>
149+
</nz-form-control>
150+
</nz-form-item>
151+
</nz-tab>
133152
</nz-tabset>
134153
</form>
135154
</div>

src/renderer/components/table/create/table.create.component.ts

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ export class CreateTableComponent extends BaseComponent implements AfterViewInit
2828
selectValue: string;
2929
columns: ColumnModel[] = new Array();
3030
columnTypes: string[] = new Array();
31-
currentConfigureStep = {
32-
index: 0,
33-
status: 'process'
34-
};
31+
validated = {
32+
basic: false,
33+
column: false,
34+
property: false
35+
}
3536

3637
constructor(private tableService: TableService,
3738
private dataSourceService: DatasourceService,
@@ -75,6 +76,30 @@ export class CreateTableComponent extends BaseComponent implements AfterViewInit
7576
this.configure = cloneDeep(value);
7677
}
7778

79+
handlerValidateStep(step: string) {
80+
switch (step) {
81+
case 'Basic':
82+
if (StringUtils.isNotEmpty(this.configure.targetName)) {
83+
this.validated.basic = true;
84+
} else {
85+
this.validated.basic = false;
86+
}
87+
break;
88+
case 'Column':
89+
const emptyCount = this.columns.filter(column => StringUtils.isEmpty(column.name)).length;
90+
if (emptyCount === 0) {
91+
this.validated.column = true;
92+
} else {
93+
this.validated.column = false;
94+
}
95+
break;
96+
case 'Property':
97+
this.validated.property = this.configure.validate;
98+
break;
99+
}
100+
this.handlerValidate();
101+
}
102+
78103
handlerValidate() {
79104
let flag;
80105
if (this.configure.validate != undefined) {
@@ -111,7 +136,7 @@ export class CreateTableComponent extends BaseComponent implements AfterViewInit
111136
} else {
112137
this.configure.optionalProperties = $event.properties;
113138
}
114-
this.handlerValidate();
139+
this.handlerValidateStep('Property');
115140
}
116141

117142
handlerPrevious(): void {
@@ -136,9 +161,4 @@ export class CreateTableComponent extends BaseComponent implements AfterViewInit
136161
}
137162
});
138163
}
139-
140-
handlerConfigureStepIndexChange(index: number): void {
141-
this.currentConfigureStep.index = index;
142-
this.currentConfigureStep.status = 'process';
143-
}
144164
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { PropertyModel } from "@renderer/model/property.model";
2+
import { TranslateUtils } from "@renderer/utils/translate.utils";
3+
import { DatabaseModel } from "@renderer/model/database.model";
4+
import { DatabaseEnum } from "@renderer/enum/database.enum";
5+
import { PropertyEnum } from "@renderer/enum/property.enum";
6+
7+
const hiveProperties = new Array();
8+
hiveProperties.push(PropertyModel.builder('uri',
9+
TranslateUtils.getValue('common.uri'),
10+
TranslateUtils.getValue('engine.table.hive.uri'),
11+
TranslateUtils.getValue('engine.table.hive.uri'),
12+
null,
13+
false,
14+
true));
15+
hiveProperties.push(PropertyModel.builder('database',
16+
TranslateUtils.getValue('common.database'),
17+
TranslateUtils.getValue('engine.table.hive.database'),
18+
TranslateUtils.getValue('engine.table.hive.database'),
19+
null,
20+
false));
21+
hiveProperties.push(PropertyModel.builder('table',
22+
TranslateUtils.getValue('common.table'),
23+
TranslateUtils.getValue('engine.table.hive.table'),
24+
TranslateUtils.getValue('engine.table.hive.table'),
25+
null,
26+
false));
27+
const HiveTableEngine = DatabaseModel.builder(DatabaseEnum.hive.toString(),
28+
TranslateUtils.getValue('engine.table.hive.description'),
29+
DatabaseEnum.hive,
30+
hiveProperties,
31+
false,
32+
PropertyEnum.name);
33+
34+
HiveTableEngine.partitionConfigure.enable = true;
35+
HiveTableEngine.supportedSource = [DatabaseEnum.clickhosue];
36+
37+
export { HiveTableEngine };

src/renderer/config/table.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { StringUtils } from '@renderer/utils/string.utils';
55
import { TranslateUtils } from '@renderer/utils/translate.utils';
66
import { PropertyModel } from '@renderer/model/property.model';
77
import { PropertyEnum } from '@renderer/enum/property.enum';
8+
import { HiveTableEngine } from "@renderer/config/engine/table/engine.table.hive.config";
89

910
@Injectable()
1011
export class TableConfig {
@@ -302,6 +303,9 @@ export class TableConfig {
302303
mysql.supportedSource = [DatabaseEnum.clickhosue];
303304
integrationEngines.push(mysql);
304305

306+
// Hive
307+
integrationEngines.push(HiveTableEngine);
308+
305309
integrationTable.engines = integrationEngines;
306310
tableEngines.push(integrationTable);
307311
return tableEngines;

src/renderer/services/builder/clickhouse.builder.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ export class ClickhouseBuilder implements BaseBuilder {
1313
sql += StringUtils.format(') {0}\n', [this.builderEngine(configure)]);
1414
const mergeProperties = this.mergeProperties(configure);
1515
sql += this.builderProperties(mergeProperties);
16+
if (configure.partitionConfigure.enable) {
17+
sql += this.builderPartition(configure);
18+
}
1619
return sql;
1720
}
1821

@@ -121,4 +124,10 @@ export class ClickhouseBuilder implements BaseBuilder {
121124
}
122125
return applyArray;
123126
}
127+
128+
private builderPartition(configure: DatabaseModel): string {
129+
let partition = configure.partitionConfigure.columns.join(' , ');
130+
const partitionStr = StringUtils.format('\nPARTITION BY ({0})', [partition]);
131+
return partitionStr;
132+
}
124133
}

0 commit comments

Comments
 (0)