Automatyzacja baz danych
Zaplanuj zapytania do wykonania w określonych odstępach czasu lub zdarzeniach, zapewniając sobie płynną automatyzację działającą dla Ciebie przez całą dobę.
Dzięki koncepcji skryptu JS obejmującej funkcje onStartup , onHook , onMessage i onShutdown , utworzenie harmonogramu wykonywania skryptu onHook przy użyciu połączonej funkcjonalności SQL i JS jest niezwykle proste.
Zacznijmy od funkcji onStartup , w której łatwo można zdefiniować, kiedy ma zostać wywołana funkcja onHook .
-
onStartup
InDriver.installHook(60000);
InDriver.installHook(3600000);
Powyższy kod będzie uruchamiał funkcję onHook co każdą pełną minutę i co godzinę, w synchronizacji z zegarem.
W funkcji onHook można łatwo utworzyć kod, który testuje warunki dla bardziej skomplikowanych przedziałów czasu, np. w każdy poniedziałek o godzinie 15:00:
-
onHook
let ts = new Date(InDriver.hook());
if (ts.getDay() === 1 && ts.getHours() === 15) {
// Execute my Monday 3pm code
}
Na przykład, zautomatyzujmy wykrywanie przepełnienia transakcji i wyzwólmy alert, gdy ich liczba przekroczy 10 000 w ciągu 1 godziny:
-
onHook
let hourTimeWindow = new Date(ts - 3600000);
let data = InDriver.sqlExecute("AzureSQLServer", "SELECT COUNT(*) FROM public.transactions WHERE ts >='" + hourTimeWindow + "';"); let count = data[0].count;
if (count > 10000) {
InDriver.sqlExecute("AzureSQLServer", "INSERT INTO public.alerts (id, ts, table, alert) VALUES (default, '" + ts + "', 'transactions', 'Overflow: " + count + "')");
}
Ten skrypt pokazuje możliwości funkcji wykonywania poleceń SQL w programie InDriver, umożliwiając automatyczne wykrywanie określonych warunków i podejmowanie natychmiastowych działań.
Odblokowanie mocy automatyzacji baz danych: rzeczywiste przypadki użycia
Explore a range of SQL automation tasks seamlessly executable within InDriver's onHook function:
1. Data Migration:
Move data from the 'source_table' in the 'source_database' to the 'destination_table' in the 'destination_database.'
InDriver.sqlExecute("SQLServer", "INSERT INTO destination_database.destination_table SELECT * FROM source_database.source_table;");
2. Data Replication:
Keep two tables synchronized, ensuring 'replica_table' in 'replica_database' mirrors 'source_table' in 'source_database.'
InDriver.sqlExecute("SQLServer", "UPDATE replica_database.replica_table SET replica_column = (SELECT source_column FROM source_database.source_table);");
3. Data Synchronization:
Keep 'main_table' in 'main_database' synchronized with 'mirror_table' in 'mirror_database.'
InDriver.sqlExecute("SQLServer","UPDATE main_database.main_table SET main_column = (SELECT mirror_column FROM mirror_database.mirror_table);");
4. Data Archiving:
Archive old records from 'active_data' to 'archive_data' for better performance.
InDriver.sqlExecute("SQLServer","INSERT INTO archive_data SELECT * FROM active_data WHERE record_date < '2023-01-01';");
5. Backup and Restore:
Automate database backup and restoration procedures. (example for PostgreSQL)
ProcessApi.start(pg_dump -U username -h localhost databasename >> sqlfile.sql");
ProcessApi.start("pg_restore -U username -d dbname -1 filename.dump");
6. Schema Changes:
Add a new column 'new_column' to 'existing_table.'
InDriver.sqlExecute("ALTER TABLE existing_table ADD new_column INT;");
7. Data Cleansing:
Remove duplicates from 'customer_data.'
InDriver.sqlExecute("DELETE FROM customer_data WHERE rowid NOT IN (SELECT MIN(rowid) FROM customer_data GROUP BY customer_id);");
8. Data Enrichment:
Add 'additional_info' from 'external_data' to 'customer_data.'
InDriver.sqlExecute("UPDATE customer_data SET additional_info = (SELECT additional_info FROM external_data WHERE customer_id = customer_data.customer_id);");
9. Data Masking:
Anonymize 'sensitive_data' by replacing it with a hash.
InDriver.sqlExecute("UPDATE sensitive_data SET sensitive_column = SHA256(sensitive_column);");
10. Audit Trail Creation:
Track changes in 'important_data' with an audit trail.
InDriver.sqlExecute("CREATE TABLE audit_trail AS SELECT * FROM important_data;");
11. Performance Monitoring:
Log execution times for queries in 'performance_log.'
InDriver.sqlExecute("INSERT INTO performance_log (query, execution_time) VALUES ('SELECT * FROM performance_data', GETDATE());");
12. Query Optimization:
Optimize a slow-performing query.
InDriver.sqlExecute("CREATE INDEX idx_name ON performance_data (column_name); ");
13. User Access Management:
Grant 'read' access to 'user' on 'sensitive_data.'
InDriver.sqlExecute("GRANT SELECT ON sensitive_data TO user");
14. Capacity Planning:
Analyze database capacity and adjust storage.
InDriver.sqlExecute("SELECT * FROM sys.database_files;");
15. Data Warehouse Loading:
Load data into 'data_warehouse' from 'source_data.'
InDriver.sqlExecute("INSERT INTO data_warehouse SELECT * FROM source_data;");
16. ETL Processes:
Automate the extraction, transformation, and loading of data.
17. Data Validation:
Ensure 'validated_data' adheres to specified criteria.
InDriver.sqlExecute("SELECT * FROM validated_data WHERE column_name IS NOT NULL;");
18. Notification Systems:
Alert administrators when 'critical_data' exceeds a threshold.
InDriver.sqlExecute("SELECT customer_name, ts, sla FROM sla_data WHERE sla_pecentage < 98%;");
19. Data Comparison:
Compare 'source_data' with 'target_data' for discrepancies.
InDriver.sqlExecute("SELECT * FROM source_data EXCEPT SELECT * FROM target_data;");
20. Dynamic Reporting Views:
Create a dynamic view 'report_view' for customizable reporting.
InDriver.sqlExecute("CREATE VIEW report_view AS SELECT * FROM dynamic_data WHERE condition = 'met'; ");
22. Data Encryption:
Encrypt 'encrypted_data' using a symmetric key.
InDriver.sqlExecute("CREATE SYMMETRIC KEY symmetric_key WITH ALGORITHM = AES_256 ENCRYPTION BY PASSWORD = 'password'; ");
23. SQL Performance Diagnostics
Measures SQL query execution time to detect poor performance and writes a debug log if execution time exceeds 10 seconds.
let startTs = new Date();
let query = "SELECT test_query";
InDriver.sqlExecute(query);
let stopTs = new Date();
let performanceMs = stopTs-startTs;
if (performanceMs > 10000)
InDriver.debug("Low query performance: " + query + " -> " + performanceMs );