sql - टाइप एआरआरई<STRUCT<hitNumber INT64, समय INT64, घंटे INT64, के साथ बिग क्वेरी में फील्ड तक नहीं पहुंच सकता...>>




nested google-bigquery (2)

अगर आप सभी जनसंपर्ककर्ताओं की तलाश कर रहे हैं - कोशिश करें

SELECT date, h.referer
FROM `refresh.ga_sessions_xxxxxx*`, UNNEST(hits) as h

मैं बड़ी क्वेरी पर मानक एसक्यूएल बोली (यानी लीगेसी एसक्यूएल नहीं) का उपयोग कर एक क्वेरी को चलाने की कोशिश कर रहा हूं। मेरी क्वेरी है:

SELECT
date, hits.referer
FROM `refresh.ga_sessions_xxxxxx*`
LIMIT 1000

लेकिन त्रुटि प्राप्त रखना

Error: Cannot access field referer on a value with type 
ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> at [2:12]

किसी को भी सही वाक्य रचना पता है?


मैं नेस्टेड कक्षाओं का अधिक उपयोग नहीं करता, लेकिन अब मैं उनका उपयोग करता हूं। विशेष रूप से जब मैं किसी प्रकार का डेटा प्रकार परिभाषित करता हूं, और फिर मैं उस डेटा प्रकार के लिए डिज़ाइन किए गए एसटीएल फ़ंक्शन को परिभाषित करना चाहता हूं।

उदाहरण के लिए, एक सामान्य Field क्लास पर विचार करें जिसमें आईडी नंबर, एक प्रकार का कोड और फ़ील्ड नाम हो। यदि मैं इन Field किसी भी vector को आईडी नंबर या नाम से खोजना चाहता हूं, तो मैं ऐसा करने के लिए एक मज़ेदार बना सकता हूं:

class Field
{
public:
  unsigned id_;
  string name_;
  unsigned type_;

  class match : public std::unary_function<bool, Field>
  {
  public:
    match(const string& name) : name_(name), has_name_(true) {};
    match(unsigned id) : id_(id), has_id_(true) {};
    bool operator()(const Field& rhs) const
    {
      bool ret = true;
      if( ret && has_id_ ) ret = id_ == rhs.id_;
      if( ret && has_name_ ) ret = name_ == rhs.name_;
      return ret;
    };
    private:
      unsigned id_;
      bool has_id_;
      string name_;
      bool has_name_;
  };
};

फिर कोड जो इन Field लिए खोज करने की आवश्यकता है Field क्लास के भीतर स्कॉप्ड match उपयोग कर सकते हैं:

vector<Field>::const_iterator it = find_if(fields.begin(), fields.end(), Field::match("FieldName"));




sql nested google-bigquery