data lake

This commit is contained in:
Gaurav Kumar
2025-11-05 18:48:27 +05:30
parent 874d5dfed2
commit cf0af07104
3 changed files with 182 additions and 0 deletions

View File

@@ -1002,4 +1002,54 @@
</div>
</div>
<!-- Blending Configuration Modal -->
<clr-modal [(clrModalOpen)]="showBlendingKeys" [clrModalSize]="'xl'" [clrModalStaticBackdrop]="true">
<h3 class="modal-title">Blending Configuration</h3>
<div class="modal-body">
<div class="blending-config-container">
<!-- Display keys for each blending lake -->
<div class="keys-section" *ngIf="blendingKeysData && blendingKeysData.length > 0">
<h4 class="section-title">
<clr-icon shape="data-field" class="section-icon"></clr-icon>
Available Data Sources
</h4>
<div class="keys-container">
<div class="key-card" *ngFor="let keyData of blendingKeysData">
<div class="key-header">
<h5>Data Lake {{ keyData.lakeId }} - Table: {{ keyData.tableName }}</h5>
</div>
<div class="headers-container">
<span class="header-tag" *ngFor="let header of keyData.headers"
(click)="insertHeaderIntoQuery(header)">
{{ header }}
</span>
</div>
</div>
</div>
</div>
<!-- SQL Query Editor -->
<div class="sql-editor-section">
<h4 class="section-title">
<clr-icon shape="code" class="section-icon"></clr-icon>
SQL Query Builder
</h4>
<div class="sql-editor-container">
<textarea class="clr-textarea sql-textarea"
[(ngModel)]="sqlQueryText"
placeholder="Enter your SQL query here using the available headers. Click on header names above to insert them into your query."
rows="8"></textarea>
<div class="editor-hint">
<small class="clr-subtext">Tip: Click on header names above to automatically insert them into your query</small>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline" (click)="closeBlendingKeys()">Cancel</button>
<button type="button" class="btn btn-primary" (click)="updateSqlQuery()">Update SQL Query</button>
</div>
</clr-modal>
<!-- htmlpopup -->

View File

@@ -499,3 +499,103 @@
margin-top: 10px;
text-align: right;
}
/* Blending Configuration Modal Styles */
.blending-config-container {
display: flex;
flex-direction: column;
gap: 20px;
}
.section-title {
color: #0072a0;
font-weight: 600;
margin-bottom: 15px;
display: flex;
align-items: center;
}
.section-icon {
margin-right: 10px;
}
.keys-section {
padding: 15px;
border-radius: 8px;
background-color: #f9f9f9;
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}
.key-card {
background-color: white;
border: 1px solid #e0e0e0;
border-radius: 6px;
padding: 15px;
margin-bottom: 15px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.key-header h5 {
margin: 0 0 10px 0;
color: #333;
font-weight: 500;
}
.headers-container {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.header-tag {
display: inline-flex;
align-items: center;
background-color: #e3f2fd;
border: 1px solid #bbdefb;
border-radius: 20px;
padding: 6px 12px;
margin: 4px;
font-size: 13px;
font-family: monospace;
cursor: pointer;
transition: all 0.2s;
}
.header-tag:hover {
background-color: #bbdefb;
transform: translateY(-2px);
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.sql-editor-section {
padding: 15px;
border-radius: 8px;
background-color: #f9f9f9;
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}
.sql-editor-container {
background-color: white;
border: 1px solid #e0e0e0;
border-radius: 6px;
padding: 15px;
}
.sql-textarea {
width: 100%;
font-family: 'Courier New', monospace;
font-size: 14px;
min-height: 150px;
}
.editor-hint {
margin-top: 10px;
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: 10px;
padding: 15px;
border-top: 1px solid #eee;
}

View File

@@ -1320,12 +1320,44 @@ export class Data_lakeComponent implements OnInit {
item.blending_lakeids.trim() !== '';
}
// Method to insert header into SQL query at cursor position
insertHeaderIntoQuery(header: string) {
const textarea = document.querySelector('.sql-textarea') as HTMLTextAreaElement;
if (textarea) {
const start = textarea.selectionStart;
const end = textarea.selectionEnd;
const text = textarea.value;
const before = text.substring(0, start);
const after = text.substring(end, text.length);
// Insert the header at cursor position
this.sqlQueryText = before + header + after;
// Set cursor position after the inserted text
setTimeout(() => {
textarea.selectionStart = start + header.length;
textarea.selectionEnd = start + header.length;
textarea.focus();
}, 0);
} else {
// Fallback: append to end of text
this.sqlQueryText += header;
}
}
// Method to fetch blending keys
fetchBlendingKeys(item: any) {
this.selectedBlendingItem = item;
this.blendingKeysData = [];
this.showBlendingKeys = true;
// Initialize SQL query text from existing data
if (item.sqlquery_json) {
this.sqlQueryText = item.sqlquery_json;
} else {
this.sqlQueryText = '';
}
// Parse blending_lakeids string to array
const lakeIds = item.blending_lakeids.split(',').map(id => id.trim()).filter(id => id !== '');