2015-06-13 13 views
13

SQL Server एक चर, एक प्रश्न में इतनी तरह की घोषणा करने के तो उस चर फोन की क्षमता है:RedShift में एक चर घोषित

DECLARE @StartDate date; 
SET @StartDate = '2015-01-01'; 

SELECT * 
FROM Orders 
WHERE OrderDate >= @StartDate; 

करता है अमेज़न के RedShift में इस कार्यक्षमता काम करता है? documentation से, ऐसा लगता है कि DECLARE पूरी तरह से कर्सर के लिए उपयोग किया जाता है। SET वह फ़ंक्शन दिखता है जिसे मैं ढूंढ रहा हूं, लेकिन जब मैं इसका उपयोग करने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती है।

set session StartDate = '2015-01-01'; 
[Error Code: 500310, SQL State: 42704] [Amazon](500310) Invalid operation: unrecognized configuration parameter "startdate"; 

क्या RedShift में ऐसा करना संभव है?

उत्तर

9

नहीं, अमेज़ॅन रेडशिफ्ट में चर की अवधारणा नहीं है। Redshift खुद को PostgreSQL के रूप में प्रस्तुत करता है, लेकिन अत्यधिक संशोधित है।

2014 एडब्ल्यूएस पुन: उपयोगकर्ता सम्मेलन में उपयोगकर्ता परिभाषित कार्यों का उल्लेख किया गया था: सम्मेलन, जो आपकी कुछ ज़रूरतों को पूरा कर सकता है।

2016 में अपडेट: स्केलर User Defined Functions कंप्यूटेशंस कर सकता है लेकिन संग्रहित चर के रूप में कार्य नहीं कर सकता है।

6

ध्यान दें कि यदि आप क्वेरी करने के लिए psql ग्राहक का उपयोग कर रहे हैं, psql चर अभी भी हमेशा की तरह Redshift के साथ प्रयोग किया जा सकता है:

$ psql --host=my_cluster_name.clusterid.us-east-1.redshift.amazonaws.com \ 
    --dbname=your_db --port=5432 --username=your_login -v dt_format=DD-MM-YYYY 

# select current_date;  
    date  
------------ 
2015-06-15 
(1 row) 

# select to_char(current_date,:'dt_format'); 
    to_char 
------------ 
15-06-2015 
(1 row) 

# \set 
AUTOCOMMIT = 'on' 
... 
dt_format = 'DD-MM-YYYY' 
... 
# \set dt_format 'MM/DD/YYYY' 
# select to_char(current_date,:'dt_format'); 
    to_char 
------------ 
06/15/2015 
(1 row) 
+0

उपयोगी हैक धन्यवाद – piggybox

0

अब आप उपयोगकर्ता परिभाषित कार्यों का उपयोग कर सकते हैं (यूडीएफ) की आप क्या चाहते करने के लिए:

CREATE FUNCTION my_const() 
    RETURNS CSTRING IMMUTABLE AS 
    $$ return 'my_string_constant' $$ language plpythonu; 

दुर्भाग्य से, यह अपने लाल विचलन डेटाबेस पर certain access permissions की आवश्यकता है।

9

असल में, आप एक अस्थायी रूप से तालिका का उपयोग करके एक चर अनुकरण कर सकते हैं, एक बना सकते हैं, डेटा सेट कर सकते हैं और आप जाने के लिए अच्छे हैं।

कुछ इस तरह:

CREATE TEMP TABLE tmp_variables AS SELECT 
    '2015-01-01'::DATE AS StartDate, 
    'some string'  AS some_value, 
    5556::BIGINT  AS some_id; 

SELECT * 
FROM Orders 
WHERE OrderDate >= (SELECT StartDate FROM tmp_variables); 

अस्थायी तालिका लेनदेन निष्पादन के बाद हटा दिया जाएगा।
टेम्पल टेबल प्रति सत्र (कनेक्ट) बाध्य हैं, इसलिए सत्रों में साझा नहीं किया जा सकता है।

5

स्लाविक मेलटर्स का जवाब बहुत अच्छा है।

WITH tmp_variables AS (
SELECT 
    '2015-01-01'::DATE AS StartDate, 
    'some string'  AS some_value, 
    5556::BIGINT  AS some_id 
) 

SELECT * 
FROM Orders 
WHERE OrderDate >= (SELECT StartDate FROM tmp_variables); 
+0

, यह मेरा यूज-केस में बेहतर है:: इस विषय पर एक बदलाव के रूप में, आप भी एक निर्माण के साथ उपयोग कर सकते हैं एक कस्टम ETLM प्रणाली है कि नहीं 'के बाद दूसरा बयान explain' होगा टेम्पलेट टेबल बनाएं। – Merlin

संबंधित मुद्दे