Thursday, January 19, 2023

Cara mendapatkan Tanggal Pertama pada Redshift / PostgreSQL

 



We can use the following method in PostgreSQL to return the first day of a given month.

This could be the first day of the current month, or the first day of the month based on a date that we specify.

Getting the first day of the month allows us to perform further calculations on the resulting date, like adding a certain number of days to the start of the month, etc.

Start of the Current Month

Here’s an example that returns the first day of the current month:

SELECT date_trunc('month', now());

Result:

2022-04-01 00:00:00+10

This uses PostgreSQL’s date_trunc() function to return the results we want. This function truncates a date/time value to a specified precision.

In this case I use the now() function to return the current date, and the 'month' argument modifies that date to the beginning of the month.

We can cast it to a date value if required:

SELECT date_trunc('month', now())::date;

Result:

2022-04-01

Here it is again, along with the actual date that I ran the example:

SELECT 
    now()::date AS "Current Date",
    date_trunc('month', now())::date AS "Start of Month";

Result:

+--------------+----------------+
| Current Date | Start of Month |
+--------------+----------------+
| 2022-04-09   | 2022-04-01     |
+--------------+----------------+

Start of a Specified Month

It doesn’t have to be the start of the current month. We can specify any date, and it will return the start of the month, based on that date.

Example:

SELECT date_trunc('month', date '2030-07-14')::date;

Result:

2030-07-01

We can then use the result to perform other actions on it. For example, we can add a given number of days to the result like this:

SELECT date_trunc('month', date '2030-07-14')::date + 20;

Result:

2030-07-21

Database Example

Here’s an example that uses dates from a database:

SELECT
    rental_date,
    date_trunc('month', rental_date)::date AS "The 1st of the Month",
    date_trunc('month', rental_date)::date + 19 AS "The 20th of the Month"
FROM rental WHERE customer_id = 459 LIMIT 10;

Result:

+---------------------+----------------------+-----------------------+
|     rental_date     | The 1st of the Month | The 20th of the Month |
+---------------------+----------------------+-----------------------+
| 2005-05-24 22:54:33 | 2005-05-01           | 2005-05-20            |
| 2005-06-17 02:50:51 | 2005-06-01           | 2005-06-20            |
| 2005-06-17 09:38:22 | 2005-06-01           | 2005-06-20            |
| 2005-06-17 16:40:33 | 2005-06-01           | 2005-06-20            |
| 2005-06-20 02:39:21 | 2005-06-01           | 2005-06-20            |
| 2005-06-20 12:35:44 | 2005-06-01           | 2005-06-20            |
| 2005-06-20 12:42:00 | 2005-06-01           | 2005-06-20            |
| 2005-06-21 02:39:44 | 2005-06-01           | 2005-06-20            |
| 2005-07-06 00:22:29 | 2005-07-01           | 2005-07-20            |
| 2005-07-08 02:51:23 | 2005-07-01           | 2005-07-20            |
+---------------------+----------------------+-----------------------+
Sumber : https://database.guide/get-the-first-day-of-the-month-in-postgresql/
Share:

Wednesday, January 18, 2023

Cara Membuat Parameter Variabel di Talend supaya lebih fleksibel

 


    Jadi ternyata di Talend itu bisa dibuatkan parameter. Jadi bisa lebih fleksibel. 

Contoh nya gini. Dalam job talend lu itu ada filter tahun, yang biasanya kita taruh langsung script didalam talend nya. Jadi kalau ada perubahan kita harus buka dulu talend studio nya. Ribet kan ya,,, apalagi kalau job talend nya udah banyak, pasti bakal berat tuu lu buka talend studio nya.

Jadi biar bisa dengan mudah merubah filter tanpa harus membuka talend studio, gua punya caranya sendiri nih. Semoga membantu ya ... 

Gini-gini caranya : 

1. Buka talend studio 

2. Pilih job yang akan dibuat parameter 

3. Kemudian ikuti gambar ini  

    - 1 klik contexts

    - 2 klik tanda + untuk menambahkan parameter 

    - 3 isi nama parameter sesuai dengan kemauan yang lu mau

4. Naaahhh ,,, kalau udah buka component tSetGlobalVar

    a. kllik + untuk menambahkan parameter 
    b. ubah nama parameternya sesuai dengan keinginan lu 
    c. ubah value context.parameter_cutoff 
        Nah kombinasinya 
            - context. = wajib pake aja 
            - parameter_cutoff = penamaan ini sesuaikan dengan yang lu buat di point 3 diatas 
5. Nah kalau udah sekarang lanjut buka di TMC nya, atau Talend Management Console yang ada di website nya itu loh 
 Nah,,, kalau berhasil berarti nanti disini akan ada tambahan parameter nya yang bisa kita isi sendiri. 
bebas dah terserah lu mau di isi apa saja. 

6. Oh iya lupa, jangan lupa juga agar di script talend nya itu bisa ngebaca isi yang lu tulis di TMC nya lu harus panggil parameternya itu juga. 

cara panggilnya gini : 
And POSTING_YEAR >= '" + context.parameter_cutoff + "'

Nih yang gua tandain merah cara manggil parameter nya. 

Kalau bingung kabarin di komen ya ... nanti bisa sharing-sharing lagi








Share:

Cara Delete table di Redshift

 


    Hallo mabro, kali ini gua pengen catet lagi ini pengetahuan yang baru gua dapetin. Intinya mah ini tu catatan buat gua si, biar gua gak lupa. Tapi mungkin catatan gua bisa bermafaat untuk yang lain, ya jadi gua share saja disini. 
    Okeh,,, karena sebelumnya gua lebih sering buat script SQL dan SQL Server sebagai databasenya. Nah sekarang gua lebih sering menggunakan Redshift untuk databasenya. Sehingga ada beberapa function script yang berbeda dengan SQL Server. Namun secara keseluruhan hampir sama cuma ada beda dibeberapa bagian saja. 
    Jadi saat ini gua mau share terkait logic untuk Delete table berdasarkan table yang lain untuk filternya. Nanti tulils dibawah yang jadi perbedaan nya. : 

SQL Server 

DELETE FROM EDW_FINANCESOD.T_SOD_CONFLICT SOD 
INNER JOIN (
SELECT CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT,COUNT(*) 'COUNT_BASELINE_DOCUMENT'
FROM (
SELECT  DISTINCT CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT,BASELINE_DOCUMENT  
FROM EDW_FINANCESOD.T_SOD_CONFLICT WHERE SOD_RULE IN ('R040','R140','R150')
) X
GROUP BY CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT
) DISTINCT_SOD ON SOD.CREATED_BY_NAME = DISTINCT_SOD.CREATED_BY_NAME 
AND SOD.COMPANY_CODE = DISTINCT_SOD.COMPANY_CODE 
AND SOD.PERIOD_OF_BASELINE_DOCUMENT = DISTINCT_SOD.PERIOD_OF_BASELINE_DOCUMENT 
WHERE DISTINCT_SOD.COUNT_BASELINE_DOCUMENT > 1 

Redshift : 
DELETE T_SOD_CONFLICT_STAGING 
FROM 
(
    SELECT CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT,COUNT(*) AS COUNT_BASELINE_DOCUMENT
    FROM (
        SELECT  DISTINCT CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT,BASELINE_DOCUMENT  FROM T_SOD_CONFLICT_STAGING WHERE SOD_RULE IN ('R040','R140','R150')
        ) X
    GROUP BY CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT
) DISTINCT_SOD 
Where 
(
    T_SOD_CONFLICT_STAGING.CREATED_BY_NAME = DISTINCT_SOD.CREATED_BY_NAME 
AND T_SOD_CONFLICT_STAGING.COMPANY_CODE = DISTINCT_SOD.COMPANY_CODE 
AND T_SOD_CONFLICT_STAGING.PERIOD_OF_BASELINE_DOCUMENT = DISTINCT_SOD.PERIOD_OF_BASELINE_DOCUMENT 
and DISTINCT_SOD.COUNT_BASELINE_DOCUMENT = 1
);

Nah,,, tu diatas bedanya. 
Biar gak puyeng gua tandain warna merah di script nya. 
1. Beda di cara delete nya 
2. beda dicara join table utama dengan table lain nya

kalo masih bingung kabarin gua di komen ya ...



Share:

Sunday, January 15, 2023

Cara Mengambil Tanggal dan conversi ke tanggal negara lain untuk Redhsift





Jadi masalahnya itu, ketika gua lagi ngerjain project yang dari Singapura. Jadi jam nya harus disesuaikan dengan jam yang ada disana. oleh karena itu, mau gak mau gua harus nambahin logic agar jam nya sama dengan yang ada di Singapur. 

Jadi begini caranya :

select DATEADD('hour',8,getdate())

Penjelasan nya : 

- DateAdd = Nama fuction nya 

- 'hour' = ini bagian mana yang mau di tambahkan atau dikurangi. Karena mau menyesuaikan dengan jam Singapur maka harus +8 yang awalnya kan Indonesia itu +7. Untuk negara lain tinggal menyesuaikan yah 

- 8 = ini merupakan conversi negara tujuan nya.  Lu bisa lihat dibawa yah buat perbandingan nya. 

- getadate() = untuk mendapatkan tanggal dan jam saat ini. 


Ini table conversi waktu Indonesia dengan beberapa negara di dunia. 

Waktu di Indonesia Negara Waktu Selisih Keterangan
07.00 (UTC +7) Malaysia 08:00 (UTC +8) +1 jam Hari yang sama
07.00 (UTC +7) Thailand 07.00 (UTC +7) - Hari yang sama
07.00 (UTC +7) Filipina 08.00 (UTC +8) +1 jam Hari yang sama
07.00 (UTC +7) Brunei Darussalam 08.00 (UTC +8) +1 jam Hari yang sama
07.00 (UTC +7) Singapura 08.00 (UTC +8) +1 jam Hari yang sama
07.00 (UTC +7) Vietnam 07.00 (UTC+7) - Hari yang sama
07.00 (UTC +7) Laos 07.00 (UTC +7) - Hari yang sama
07.00 (UTC +7) Myanmar 06.30 (UTC +6:30) -30 menit Hari yang sama
07.00 (UTC +7) Kamboja 07.00 (UTC +7) - Hari yang sama
07.00 (UTC +7) Amerika Serikat 19.00 (UTC -5) -12 jam Hari sebelumnya
07.00 (UTC +7) Korea Selatan 09.00 (UTC +9) +2 jam Hari yang sama
07.00 (UTC +7) Australia (Canberra) 11.00 (UTC +11) +4 jam Hari yang sama
07.00 (UTC +7) Belanda 01.00 (UTC +1) -6 jam Hari yang sama
07.00 (UTC +7) Perancis 01.00 (UTC +1) -6 jam Hari yang sama
07.00 (UTC +7) Italia 01.00 (UTC +1) -6 jam Hari yang sama
07.00 (UTC +7) Brasil (Rio de Janeiro) 21.00 (UTC -3) -10 jam Hari sebelumnya
07.00 (UTC +7) Argentina 21.00 (UTC -3) -10 jam Hari sebelumnya
07.00 (UTC +7) Uni Emirat Arab (Dubai) 04.00 (UTC +4) -3 jam Hari yang sama
07.00 (UTC +7) Vatikan 01.00 (UTC +1) -6 jam Hari yang sama
07.00 (UTC +7) Turki (Ankara) 03.00 (UTC +3) -4 jam Hari yang sama
07.00 (UTC +7) Timor Leste (Dili) 09.00 (UTC +9) +2 jam Hari yang sama
07.00 (UTC +7) Spanyol (Madrid) 01.00 (UTC +1) -6 jam Hari yang sama
07.00 (UTC +7) Pakistan 05.00 (UTC +5) -2 jam Hari yang sama
07.00 (UTC +7) Mesir (Kairo) 02.00 (UTC +2) -5 jam Hari yang sama
07.00 (UTC +7) Jerman (Berlin) 01.00 (UTC +1) -6 jam Hari yang sama

Jika lu udah baca postingan gua, tinggalin jejak ya dengan komen di postingan gua. Biar gua tahu kalau postingan gua ini bermanfaat. 
Share: