अर्ध-संरचित डेटा

Redshift परिचय

Jason Myers

Principal Architect

अर्ध-संरचित डेटा

  • Redshift के SUPER टाइप में संग्रहीत
  • अलग-अलग फ़ॉर्मैट के लिए समर्पित SQL फ़ंक्शन होते हैं
  • JSON, अर्ध-संरचित डेटा का एक प्रकार है
Redshift परिचय

JSON मान्यकरण फ़ंक्शन

  • IS_VALID_JSON - सुनिश्चित करता है कि पूरा JSON ऑब्जेक्ट वैध है
SELECT IS_VALID_JSON('{"one":1, "two":2}');
IS_VALID_JSON
=============
true
SELECT IS_VALID_JSON('{"one":1, "two":2');
IS_VALID_JSON
=============
false
  • IS_VALID_JSON_ARRAY - सुनिश्चित करता है कि JSON array वैध है.
SELECT IS_VALID_JSON_ARRAY('{"one":1}')
IS_VALID_JSON_ARRAY
===================
false
SELECT IS_VALID_JSON_ARRAY('[1,2,3]')
IS_VALID_JSON_ARRAY
===================
true
Redshift परिचय

JSON ऑब्जेक्ट से एक्सट्रैक्ट करना

  • JSON_EXTRACT_PATH_TEXT दिए गए JSON path पर वैल्यू लौटाता है
  • पहले JSON string या फ़ील्ड, फिर path के एक या अधिक keys लेता है
SELECT JSON_EXTRACT_PATH_TEXT('{"one":1, "two":2}', 'one');
JSON_EXTRACT_PATH_TEXT
======================
1
Redshift परिचय

अमान्य JSON को parse करने का प्रयास

-- खराब फॉर्म वाले JSON से path निकालने की कोशिश
SELECT JSON_EXTRACT_PATH_TEXT('{"one":1, "two":2', 'one');
JSON parsing error
DETAIL:  
  =========================================
  error:  JSON parsing error
  code:      8001
  context:   invalid json object 
  query:     [child_sequence:'one']
  location:  funcs_json.hpp:202
  process:   padbmaster [pid=1073807529]
  =========================================
Redshift परिचय

नेस्टेड JSON paths से एक्सट्रैक्ट करना

  • कई key आर्ग्युमेंट दें
SELECT JSON_EXTRACT_PATH_TEXT('
         {
           "one_object":{
              "nested_three": 3, 
              "nested_four":4
           }, 
           "two":2
         }', 
         'one_object', 'nested_three');
JSON_EXTRACT_PATH_TEXT
======================
3
Redshift परिचय

अस्तित्वहीन नेस्टेड JSON paths से एक्सट्रैक्ट करना

  • NULL लौटाता है
    SELECT JSON_EXTRACT_PATH_TEXT('
           {
             "one_object":{
                "nested_three": 3, 
                "nested_four":4
             }, 
             "two":2
           }', 
           'two', 'nested_five');
    
JSON_EXTRACT_PATH_TEXT
======================
NULL
Redshift परिचय

JSON array से एक्सट्रैक्ट करना

  • JSON_EXTRACT_ARRAY_ELEMENT_TEXT array index पर वैल्यू लौटाता है
  • पहले JSON string या फ़ील्ड, फिर शून्य से शुरू होने वाला index का integer लेता है।
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('[1.1,400,13]', 2);
JSON_EXTRACT_ARRAY_ELEMENT_TEXT
===============================
13
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('[1.1,400,13]', 3);
JSON_EXTRACT_ARRAY_ELEMENT_TEXT
===============================
NULL
Redshift परिचय

नेस्टेड JSON array से एक्सट्रैक्ट करना

SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT(
           JSON_EXTRACT_PATH_TEXT('
               {
                 "one":1, 
                 "nested_two":[3,4,5]
               }', 
               -- JSON_EXTRACT_PATH_TEXT से nested_two की वैल्यू एक्सट्रैक्ट करना
               'nested_two'
            ),
            -- JSON_EXTRACT_ARRAY_ELEMENT_TEXT से array के पोज़िशन एक का आइटम एक्सट्रैक्ट करना
            1
       );
JSON_EXTRACT_ARRAY_ELEMENT_TEXT
===============================
4
Redshift परिचय

नेस्टेड JSON array से एक्सट्रैक्ट करने का शॉर्टकट

  • Array index एक string होना चाहिए
-- दो keys ('nested_two', '1') पास कर रहे हैं ताकि
-- nested_two की array वैल्यू का दूसरा एलिमेंट चुना जाए
SELECT JSON_EXTRACT_PATH_TEXT('
          {
            "one":1, 
            "nested_two":[3,4,5]
          }', 
          'nested_two', '1'
       );
JSON_EXTRACT_PATH_TEXT
======================
4
Redshift परिचय

CTEs में casting

WITH location_details AS (
    SELECT '{
        "location": "Salmon Challis National Forest",
      }'::SUPER::VARCHAR AS data
) 
  • location_details.data के रूप में एक्सेसिबल
Redshift परिचय

अभ्यास करते हैं!

Redshift परिचय

Preparing Video For Download...