aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorudovichenko-r <rvu@ydb.tech>2023-09-22 10:48:12 +0300
committerudovichenko-r <rvu@ydb.tech>2023-09-22 11:11:16 +0300
commitc754592cb0467397d0871caa6c6ca4bcd9823263 (patch)
tree8fda1b545dbe7fc837af061c90e7c1e1073a52b7
parent5658275f576bf0a2a4e904c661e10f9efe122ebe (diff)
downloadydb-c754592cb0467397d0871caa6c6ca4bcd9823263.tar.gz
[yt provider] Ignore fake column from YT schema
YQL-16492
-rw-r--r--ydb/library/yql/providers/yt/codec/yt_codec.cpp2
-rw-r--r--ydb/library/yql/providers/yt/common/yql_names.h1
-rw-r--r--ydb/library/yql/providers/yt/lib/row_spec/yql_row_spec.cpp7
-rw-r--r--ydb/library/yql/providers/yt/lib/schema/schema.cpp10
-rw-r--r--ydb/library/yql/providers/yt/lib/skiff/yql_skiff_schema.cpp4
5 files changed, 12 insertions, 12 deletions
diff --git a/ydb/library/yql/providers/yt/codec/yt_codec.cpp b/ydb/library/yql/providers/yt/codec/yt_codec.cpp
index 3d49a5c699e..4bb1562a642 100644
--- a/ydb/library/yql/providers/yt/codec/yt_codec.cpp
+++ b/ydb/library/yql/providers/yt/codec/yt_codec.cpp
@@ -208,7 +208,7 @@ void TMkqlIOSpecs::LoadSpecInfo(bool inputSpec, const NYT::TNode& attrs, NCommon
if (inputSpec && AS_TYPE(TStructType, info.Type)->GetMembersCount() == 0) {
auto fieldType = codecCtx.Builder.NewDataType(NUdf::EDataSlot::Bool);
fieldType = codecCtx.Builder.NewOptionalType(fieldType);
- info.AuxColumns.emplace("_yql_fake_column", fieldType);
+ info.AuxColumns.emplace(YqlFakeColumnName, fieldType);
}
}
else {
diff --git a/ydb/library/yql/providers/yt/common/yql_names.h b/ydb/library/yql/providers/yt/common/yql_names.h
index 3b6adff996f..1fece7c7141 100644
--- a/ydb/library/yql/providers/yt/common/yql_names.h
+++ b/ydb/library/yql/providers/yt/common/yql_names.h
@@ -38,6 +38,7 @@ const TStringBuf YqlSysColumnNum = "_yql_sys_tablenum";
const TStringBuf YqlSysColumnKeySwitch = "_yql_sys_tablekeyswitch";
const TStringBuf YqlOthersColumnName = "_other";
+const TStringBuf YqlFakeColumnName = "_yql_fake_column";
const TStringBuf YqlTypeAttribute = "_yql_type";
const TStringBuf YqlTypeView = "view";
diff --git a/ydb/library/yql/providers/yt/lib/row_spec/yql_row_spec.cpp b/ydb/library/yql/providers/yt/lib/row_spec/yql_row_spec.cpp
index a312e07c338..253ed85bd4c 100644
--- a/ydb/library/yql/providers/yt/lib/row_spec/yql_row_spec.cpp
+++ b/ydb/library/yql/providers/yt/lib/row_spec/yql_row_spec.cpp
@@ -300,13 +300,10 @@ bool TYqlRowSpecInfo::ParseFull(const NYT::TNode& rowSpecAttr, const THashMap<TS
if (type->GetKind() != ETypeAnnotationKind::Struct) {
YQL_LOG_CTX_THROW yexception() << "YT schema type has a non struct type: " << *type;
}
- THashSet<TStringBuf> auxFields;
- for (auto& col: SortedBy) {
- auxFields.insert(col);
- }
+ THashSet<TStringBuf> auxFields(SortedBy.cbegin(), SortedBy.cend());
TStringBuilder hiddenFields;
for (auto item: type->Cast<TStructExprType>()->GetItems()) {
- if (!Type->FindItem(item->GetName()) && !auxFields.contains(item->GetName())) {
+ if (const auto name = item->GetName(); !Type->FindItem(name) && !auxFields.contains(name)) {
if (hiddenFields.size() > 100) {
hiddenFields << ", ...";
break;
diff --git a/ydb/library/yql/providers/yt/lib/schema/schema.cpp b/ydb/library/yql/providers/yt/lib/schema/schema.cpp
index 19261a5fa5a..fb9035121de 100644
--- a/ydb/library/yql/providers/yt/lib/schema/schema.cpp
+++ b/ydb/library/yql/providers/yt/lib/schema/schema.cpp
@@ -333,9 +333,11 @@ NYT::TNode YTSchemaToRowSpec(const NYT::TNode& schema, const TYTSortInfo* sortIn
if (!type) {
continue;
}
- resultTypes.Add(NYT::TNode()
- .Add(fieldName)
- .Add(*type));
+ if (YqlFakeColumnName != fieldName || schema.AsList().size() > 1) {
+ resultTypes.Add(NYT::TNode()
+ .Add(fieldName)
+ .Add(*type));
+ }
}
}
@@ -996,7 +998,7 @@ NYT::TTableSchema RowSpecToYTSchema(const NYT::TNode& rowSpec, ui64 nativeTypeCo
// add fake column to avoid slow 0-columns YT schema
if (schema.Columns().empty()) {
schema.AddColumn(NYT::TColumnSchema()
- .Name("_yql_fake_column")
+ .Name(TString{YqlFakeColumnName})
.Type(NYT::EValueType::VT_BOOLEAN, /*required*/ false));
}
diff --git a/ydb/library/yql/providers/yt/lib/skiff/yql_skiff_schema.cpp b/ydb/library/yql/providers/yt/lib/skiff/yql_skiff_schema.cpp
index 945920a4daf..12b787e7be3 100644
--- a/ydb/library/yql/providers/yt/lib/skiff/yql_skiff_schema.cpp
+++ b/ydb/library/yql/providers/yt/lib/skiff/yql_skiff_schema.cpp
@@ -236,8 +236,8 @@ NYT::TNode RowSpecToOutputSkiff(const NYT::TNode& attrs) {
}
if (typeColumns.empty()) {
- typeColumns.emplace("_yql_fake_column", NYT::TNode()
- ("name", "_yql_fake_column")
+ typeColumns.emplace(YqlFakeColumnName, NYT::TNode()
+ ("name", YqlFakeColumnName)
("wire_type", "variant8")
("children", NYT::TNode()
.Add(NYT::TNode()("wire_type", "nothing"))