teradata первый день месяца
15.10. Date and Time Functions and Operators
Date and Time Operators
Time Zone Conversion
The AT TIME ZONE operator sets the time zone of a timestamp:
Date and Time Functions
Returns the current date as of the start of the query.
Returns the current time as of the start of the query.
Returns the current timestamp as of the start of the query.
Returns the current time zone in the format defined by IANA (e.g., America/Los_Angeles ) or as fixed offset from UTC (e.g., +08:35 )
from_iso8601_timestamp ( string ) → timestamp with time zone
from_iso8601_date ( string ) → date
from_unixtime ( unixtime ) → timestamp
Returns the UNIX timestamp unixtime as a timestamp.
from_unixtime ( unixtime, string ) → timestamp with time zone
Returns the UNIX timestamp unixtime as a timestamp with time zone using string for the time zone.
from_unixtime ( unixtime, hours, minutes ) → timestamp with time zone
Returns the UNIX timestamp unixtime as a timestamp with time zone using hours and minutes for the time zone offset.
Returns the current time as of the start of the query.
Returns the current timestamp as of the start of the query.
now ( ) → timestamp with time zone
to_iso8601 ( x ) → varchar
Formats x as an ISO 8601 string. x can be date, timestamp, or timestamp with time zone.
to_unixtime ( timestamp ) → double
Returns timestamp as a UNIX timestamp.
The following SQL-standard functions do not use parenthesis:
Truncation Function
The date_trunc function supports the following units:
Unit | Example Truncated Value |
---|---|
second | 2001-08-22 03:04:05.000 |
minute | 2001-08-22 03:04:00.000 |
hour | 2001-08-22 03:00:00.000 |
day | 2001-08-22 00:00:00.000 |
week | 2001-08-20 00:00:00.000 |
month | 2001-08-01 00:00:00.000 |
quarter | 2001-07-01 00:00:00.000 |
year | 2001-01-01 00:00:00.000 |
The above examples use the timestamp 2001-08-22 03:04:05.321 as the input.
date_trunc ( unit, x ) → [same as input]
Interval Functions
The functions in this section support the following interval units:
Unit | Description |
---|---|
millisecond | Milliseconds |
second | Seconds |
minute | Minutes |
hour | Hours |
day | Days |
week | Weeks |
month | Months |
quarter | Quarters of a year |
year | Years |
date_add ( unit, value, timestamp ) → [same as input]
date_diff ( unit, timestamp1, timestamp2 ) → bigint
MySQL Date Functions
The functions in this section use a format string that is compatible with the MySQL date_parse and str_to_date functions. The following table, based on the MySQL manual, describes the format specifiers:
The following specifiers are not currently supported: %D %U %u %V %w %X
date_parse ( string, format ) → timestamp
Java Date Functions
The functions in this section use a format string that is compatible with JodaTime’s DateTimeFormat pattern format.
format_datetime ( timestamp, format ) → varchar
parse_datetime ( string, format ) → timestamp with time zone
Extraction Function
The extract function supports the following fields:
Field | Description |
---|---|
YEAR | year() |
QUARTER | quarter() |
MONTH | month() |
WEEK | week() |
DAY | day() |
DAY_OF_MONTH | day() |
DAY_OF_WEEK | day_of_week() |
DOW | day_of_week() |
DAY_OF_YEAR | day_of_year() |
DOY | day_of_year() |
YEAR_OF_WEEK | year_of_week() |
YOW | year_of_week() |
HOUR | hour() |
MINUTE | minute() |
SECOND | second() |
TIMEZONE_HOUR | timezone_hour() |
TIMEZONE_MINUTE | timezone_minute() |
The types supported by the extract function vary depending on the field to be extracted. Most fields support all date and time types.
extract ( field FROM x ) → bigint
This SQL-standard function uses special syntax for specifying the arguments.
Convenience Extraction Functions
day_of_month ( x ) → bigint
day_of_week ( x ) → bigint
day_of_year ( x ) → bigint
minute ( x ) → bigint
quarter ( x ) → bigint
second ( x ) → bigint
timezone_hour ( timestamp ) → bigint
timezone_minute ( timestamp ) → bigint
Teradata Date/Time Function
Date and time function one of the most important function in Teradata. So we need to understand the concept very clearly.
Keywords related to the Date and Time
DATE | ANSI DATE | TIME | ANSI TIME | TIMESTAMP | TIMESTAMP WITH SIX PRECISION SECOND |
9/21/2016 | 9/21/2016 | 07:06:35 | 07:06:35 | 9/21/2016 07:06:35 | 9/21/2016 07:06:35.950000 |
How Teradata stores dates internally?
Teradata stores dates as INTEGER using below formula.
So the date 2016-09-21 will store internally as below.
(2016-1900)*10000 + (9*100) + 21 = 1160921
You can verify this using following query.
Changing the DATEFORM in BTEQ
You can change the display of date form using DATEFORM. There are 2 types of form to display the date. They are INTEGERDATE and ANSIDATE. The default is INTEGERDATE.
As Teradata stores dates as INTEGER, we can perform some arithmetic operation on date. Teradata provides some functions to perform these operations.
Add or subtract days from a DATE
ADD MONTHS command
You can add a month or many months to your date or timestamp column.
The EXTRACT command
The EXTRACT command extracts date part such as year, month and day from date and hour, minute and second from TIME/TIMESTAMP value.
Following examples how to extract year, month and date from date value and hour, minute and second from the TIMESTAMP value.
The INTERVAL Command
The INTERVAL function is used to perform the arithmetic and conversion operation on DATE and TIME values.
Teradata provides below INTERVAL functions.
The following example adds 2 years to the current date.
The following example adds 3 years 3 months to the current date.
The following example adds 2 hours 5 minutes 10 seconds to the current_timestamp.
The following example adds 2 days 10 minutes to the current_timestamp.
Русские Блоги
Основы SQL-Teradata
Основы SQL-Teradata
1. Создайте таблицу с той же структурой, что и таблица pnr_1.
Создать таблицу pnr_2 как pnr_1 без данных
Создать таблицу pnr_2 как pnr_1 с данными
2. NULLIF (exp1, exp2) возвращает ноль, если поля exp1 и exp2 равны, возвращает exp1, когда два не равны
——- Обычно используется, когда делитель не может быть 0 RPK / NULLIF (ASK, 0)
3. Перехват Substr (exp, m, n) от m-го бита, длина перехвата равна n
—— Обычно используется при обработке временных подстрок (‘20141023’, 1, 6) à ’201410’
4. COALESCE (expression_1, expression_2,…, expression_n) ссылается на каждое выражение параметра по очереди и останавливает и возвращает значение, когда оно встречает ненулевое значение. Если все выражения имеют нулевое значение, в конечном итоге будет возвращено нулевое значение.
Index (str1, str2) возвращает начальную позицию str2 в str1
Индекс (str1, str2)> 0 Имя таблицы содержит str2 в str1
6. Десятичная (n, m) эффективная длина составляет n десятичных знаков, учитывающих m
7. Принцип округления Teradata: правила округления в Teradata определяются параметром RoundHalfwayMagUp в DBSCONTROL. Значение по умолчанию RoundHalfwayMagUp = FALSE. В это время округление выполняется в соответствии с правилом Teradata. Правило Teradata считает, что 5 является промежуточным значением, и вероятность не равна даже всем округлениям. Если это зависит от четности предыдущего бита, округленные 5 и округленные 5. являются средними.В соответствии с этим принципом правило округления Teradata: когда есть бит после 5, который не равен 0, тогда переносите, когда 5 Когда все они равны 0 или других битов нет, в соответствии с четностью предыдущего бита 5, нечетные и четные не будут введены.
8. Когда две таблицы объединены, типы данных соответствующих полей должны быть полностью согласованными.
—— Буквы и китайские иероглифы не могут быть объединены
—— При объединении 958 и 0.123 значение 0.123 будет принудительно преобразовано в 0, поэтому убедитесь, что тип данных соответствует
9. Замените прежнее место («тера-данные», «-», «») === «терадата».
minus sleect A,B,C from table_1 where E=1
—— Удалить данные, содержащиеся в результате запроса 2 из результата запроса 1
Дата первого месяца предыдущего года текущей даты
Преобразовать десятичные дроби в проценты
cast(0.1234*100 as decimal(20,2))||’%’ ===》 12.34%
Таблица переименовать переименовать таблицу tablename в newtablename
Справочная база данных pmart отображает объекты в библиотеке pmart (таблицы, представления, макросы и т. Д.)
Select * from table_1 where name(CASESPECIFIC) like ‘%M%’
——— teradata не чувствительна к регистру в состоянии по умолчанию
%, _ Используется как символ подстановки в лайке, но при поиске% и _ сам
Определите ESCAPE символ% и _ после того, как escape-символ используется в качестве общих символов
like ‘B% ‘ESCAPE’ B ‘—- любой конец строки символов со вторым символом как _
char (M) символьная строка фиксированной длины занимает в общей сложности M байтов. Когда символьная строка меньше M байтов, она дополняется пробелами; varchar (M) символьная строка переменной длины Максимальная длина составляет M
Функции, связанные с датой
EXTRACT — select extract( year/month/day from date+30)
——select UPPER(name) ;select name(UPPERCASE)
Create MACRO macro_name
Изменить определение макроса
ЗАМЕНИТЕ МАКРО макро-имя (параметр макроса) AS (………)
DROP MACRO pmart.macro_mkt_dom_reg_detail
КОММЕНТАРИЙ О МАКРО pmart.macro_mkt_dom_reg_detail IS «Международный отчет»
—- Результат подзапроса уникален, без повторяющихся значений, что эквивалентно добавлению различных
—- порядок не может быть использован для подзапроса
Выберите pax_count DECIMAL (20,6) (НАЗВАНИЕ «Количество перевезенных пассажиров»)
Select * from table_1 where CHARACTERS(first_name)>5
Select * from tbale_1 where CHARACTERS( TRIM(frist_name) )>5
select trim (’ abc ‘) ===》 abc
выберите обрезку (оба ‘a’ из ‘aabacdea’) ===》 bacde удалить первый и последний указанные символы
выберите обрезку (ведущий ‘a’ из ac aabacdea ’) ===》 bacdea удаляет указанные в начале символы
выбрать обрезку (завершающий ‘a’ из ‘aabacdea’) ===》 aabacde удалить указанный символ в конце
Когда таблица связана с самим собой, то есть само-соединение (self join), таблица должна использовать псевдоним
CREATE VOLATILE MULTISET TABLE VT_RPT_OD_FORWARD_BOOKING
ON COMMIT PRESERVE ROWS;
CHARACTER SET UNICODE CASESPECIFIC
При создании переменных временных таблиц параметры CREATE TABLE, которые не допускаются, включают:
Постоянное ведение журнала
Проверьте ограничение (Проверьте)
Столбец по умолчанию
По умолчанию по умолчанию установлено значение SET TABLE. При вставке SET TABLE необходимо проверить, есть ли в таблице дублирующиеся данные, чтобы она потребляла много ресурсов. Поэтому при построении таблицы следует использовать MULTISET TABLE.
Принципы выбора: как можно больше разных значений, частое использование (доступ к значениям и доступ к соединению), меньше обновлений
CREATE VOLATILE MULTISET TABLE vt_airport_city_cnty_region AS
PRIMARY INDEX (airport_iata_cd)
ON COMMIT PRESERVE ROWS;
UNION —Автоматическое удаление повторяющихся записей после объединения двух наборов
drop table table_name удаляет содержимое таблицы и ее определение в словаре данных
delect table_name / delect from table_name только удалить данные в таблице
Удалить записи, которые соответствуют определенному условию: delect из table_name, где age 20 and age 20 and age 999
36. Операции сбора (операции сбора нельзя использовать в подзапросах)
Create view view_name as select * from table_name
В реляционной базе данных не все представления могут быть обновлены, поскольку обновления некоторых представлений не могут быть однозначно и осмысленно преобразованы в обновления соответствующих базовых таблиц.
(1) Если представление получено из более чем двух основных таблиц, представление не может быть обновлено.
(2) Если поля представления получены из выражений или констант полей, операции INSERT и UPDATE в этом представлении запрещены, но операции DELETE разрешены.
(3) Если поле представления происходит из заданной функции, представление не может быть обновлено.
(4) Если предложение GROUP BY включено в определение представления, представление не может быть обновлено.
(5) Если фраза DISTINCT включена в определение представления, представление не может быть обновлено.
(6) Если в определении представления есть вложенные запросы, и таблица, включенная в предложение FROM внутреннего запроса, также является базовой таблицей, которая экспортирует представление, это представление не может быть обновлено.
Базовая таблица системного календаря Sys_calendar.Caldates
calendar_date DATE UNIQUE (стандартная дата Teradata)
day_of_week BYTEINT, (1-7, день недели, 1 представляет воскресенье)
day_of_month BYTEINT, (1-31, номер месяца)
day_of_year SMALLINT, (1-366, день года)
weekday_of_month BYTEINT, (Количество вхождений дня недели в этом месяце)
week_of_month BYTEINT, (неделя месяца, с воскресенья по субботу как неделя. 0, таблица
(Показывает первую незавершенную неделю месяца; 1 означает первую полную неделю месяца)
week_of_year BYTEINT, (0-53) (неделя года, 0 означает первую неполную неделю)
month_of_quarter BYTEINT, (1-3, месяц квартала)
month_of_year BYTEINT, (1-12, месяц года)
month_of_calendar INTEGER, (1-n, месяц в этом календаре, начиная с января 1900 г.)
quar_of_year BYTEINT, (1-4, квартал года)
quar_of_calendar INTEGER, (четверть этого календаря, начиная с января 1900 года)
year_of_calendar SMALLINT, (год, с 1900)
Накопить номер рейса с flight_dt
Нажмите flight_dt, чтобы накапливать номер рейса на разных маршрутах, то есть повторно накапливать на разных маршрутах
Сортировать по разным авиакомпаниям
Условно ограничить результаты после ранжирования: квалифицироваться
Позиция в порядке убывания (flight_profit ASC). В настоящее время Quality> 10 занимает первые 10 строк в списке (то есть, 10 самых низких flight_profit)
Select rank(flight_profit) as rank_1 from table_name
Выберите 10 лучших данных
41. Квантиль (в порядке возрастания согласно order_list каждая запись находится в квантиле позиции)
Квантиль (quantile_constant, order_list ASC), упорядоченный в порядке убывания order_list, причем наибольшее значение находится спереди, а наименьшее квантиль (0)
Квантиль (quantile_constant, order_list_1, order_list_2) Если значение order_list1 для двух записей одинаковое, выполните сортировку в порядке возрастания в соответствии со значением order_list2, а затем определите соответствующий квантиль
43. Библиотека импорта данных
Сохраните файл внешних данных в виде файла Excel в формате CSV, а затем сохраните файл CSV в виде текстового файла TXT.
Создать новую таблицу данных для импорта в библиотеку
Вставьте в new_table_name («Поле 1», «Поле 2», «Поле 3») значения (. )
44. Повторяющиеся данные в справочной таблице
Select flight_dt, airline_cd,rpk,ask from table_name where flight_dt=’20141128’ group by 1,2,3,4 having count(*)>1
45. Переменная временная таблица
Вы можете использовать команду HELP VOLATILE TABLE, чтобы получить все переменные временные таблицы, которые существуют в сеансе
Информация. (Примечание. Команда HELP DATABASE не будет отображать переменные временные таблицы, поскольку словарь данных не записывает переменные временные таблицы.)
Переменная временная таблица не может: использовать журнал доступа, переименовать, использовать утилиту Multiload или Fastload для загрузки
46. Неуникальный вторичный индекс UNSI
Неуникальный вторичный индекс (NUSI) является разновидностью индекса Teradata, неосновного индекса, значение столбца индекса может быть не уникальным. Как правило, использование индексированных столбцов в предложении WHERE повышает производительность запросов. Создайте неуникальный вторичный индекс, вы можете использовать синтаксис CREATE TABLE для создания с таблицей, вы также можете использовать синтаксис CREATE INDEX для создания после создания таблицы. Если индекс больше не нужен, вы можете использовать DROP INDEX для удаления индекса.
Создается неуникальный вторичный индекс, и на каждом AMP создается вложенная таблица. В подстоле хранятся некоторые записи, включая каждое значение индекса и номер записи (id-строки) записи базовой таблицы, а записи в под-таблице сортируются и сохраняются в соответствии со значением индекса хеш-значения. Таким образом, очень удобно находить записи по значению индекса, но для поиска по диапазону индекс бесполезен. Например, при использовании вышеуказанного индекса при опросе сотрудников с рабочим кодом 122100 индекс работает, а при запросе сотрудников с рабочим кодом от 122000 до 123000 индекс не работает.
Создайте неуникальный вторичный индекс:
(2) Создать неуникальный вторичный индекс, когда таблица уже существует
Создать индекс (имя поля) для таблицы _ имя
Удалите неуникальный вторичный индекс таблицы:
——— Неуникальный вторичный индекс, отсортированный по значению
Подтаблица индекса неуникального вторичного индекса (Value Ordered NUSI), отсортированного по значению, сохраняет записи по значению данных, а не по значению хеш-функции. Этот индекс очень полезен при запросах по диапазону.
(1) Сразу добавить порядок индекса (имя поля) по значениям (имя поля) после построения оператора
(2) Когда таблица уже существует
Создать порядок индекса (имени поля) по значениям (имени поля) для table_name
Неуникальные столбцы вторичного индекса, отсортированные по значению, должны быть:
! Принадлежит столбцу в определении индекса
Примечание. Хотя тип данных DECIMAL разрешен, длина не может превышать 4 байта и не может иметь десятичных дробей.
Целью присоединения к индексу является предоставление данных из вложенной таблицы индекса и предотвращение доступа к базовой таблице.
CREATE JOIN INDEX cust_ord_ix AS
FROM customer c INNER JOIN orders o
ON c.cust_id = o.cust_id
Индекс соединения состоит из двух частей: фиксированной части (в первой скобке) и повторяемой части (во второй скобке).
47. Загрузка внешних данных (небольшой объем данных, несколько полей)
(1) Сохранить внешний файл данных типа CSV в виде текстового файла TXT
—— Убедитесь, что разделитель, распознаваемый помощником Teradata, является запятой
Insert into ptest.corp_name (sort_num,corp_name) values (. ) ;
rank() over (partition by calss order by age )
(Сортировка записей по группам полей) Сначала группа по классу, затем сортировка по возрасту в каждом классе
row_number() over (partition by class order by age )
(Сортировка записей по группам полей) Сначала группа по классу, затем сортировка по возрасту в каждом классе
sum() over (partition by calss order by score )
(Объедините записи в соответствии с полем группировки) Сначала группируйте по классам, затем суммируйте баллы
49. Объяснить (выбрать ……) возвращает шаг выполнения SQL после обработки оптимизации, который является только шагом выполнения, на самом деле не выполненным
AS REV from PMART.APP_OTH_AIR_BILL
where substr(summ_dt,1,4)=‘2013’ and airline_cd=‘UA’ group by 1,2,3 ORDER BY 2,3)
First, we lock a distinct PMART.“pseudo table” for read on a
RowHash to prevent global deadlock for PMART.APP_OTH_AIR_BILL.
Next, we lock PMART.APP_OTH_AIR_BILL for read.
We do an all-AMPs SUM step to aggregate from
PMART.APP_OTH_AIR_BILL by way of an all-rows scan with a condition
of («(PMART.APP_OTH_AIR_BILL.Airline_Cd = ‘UA’) AND
, grouping by field1 ( PMART.APP_OTH_AIR_BILL.Airline_Cd
,PMART.APP_OTH_AIR_BILL.ARR_AIRPORT_CD). Aggregate Intermediate
Results are computed globally, then placed in Spool 3. The size
of Spool 3 is estimated with no confidence to be 283,494 rows (
12,757,230 bytes). The estimated time for this step is 0.11
We do an all-AMPs RETRIEVE step from Spool 3 (Last Use) by way of
an all-rows scan into Spool 1 (group_amps), which is built locally
on the AMPs. Then we do a SORT to order Spool 1 by the sort key
in spool field1 (PMART.APP_OTH_AIR_BILL.DEP_AIRPORT_CD,
PMART.APP_OTH_AIR_BILL.ARR_AIRPORT_CD). The size of Spool 1 is
estimated with no confidence to be 283,494 rows (14,741,688 bytes).
The estimated time for this step is 0.03 seconds.
Finally, we send out an END TRANSACTION step to all AMPs involved
in processing the request.
-> The contents of Spool 1 are sent back to the user as the result of
Инвестидея: Teradata, потому что облака
Сегодня у нас умеренно спекулятивная идея: взять акции поставщика ПО и ИТ-услуг Teradata (NYSE: TDC), чтобы заработать на росте активности в ее сфере.
Потенциал роста и срок действия: 20% за 20 месяцев; 10% в год на протяжении 10 лет.
Почему акции могут вырасти: облачные вычисления — это перспективно.
Идею по Teradata придумал наш читатель Владислав Радионов в комментариях к разбору Merck. Предлагайте свои идеи в комментариях.
Без гарантий
Наши размышления основаны на анализе бизнеса компании и личном опыте наших инвесторов, но помните: не факт, что инвестидея сработает так, как мы ожидаем. Все, что мы пишем, — это прогнозы и гипотезы, а не призыв к действию. Полагаться на наши размышления или нет — решать вам.
Если хотите первыми узнавать, сработала ли инвестидея, подпишитесь на Т—Ж в «Телеграме»: как только это станет известно, мы сообщим.
И что там с прогнозами автора
Исследования, например вот это и вот это, говорят о том, что точность предсказаний целевых цен невелика. И это нормально: на бирже всегда слишком много неожиданностей и точные прогнозы реализовываются редко. Если бы ситуация была обратная, то фонды на основе компьютерных алгоритмов показывали бы результаты лучше людей, но увы, работают они хуже.
Поэтому мы не пытаемся строить сложные модели. Прогноз доходности в статье — это ожидания автора. Этот прогноз мы указываем для ориентира: как и с инвестидеей в целом, читатели решают сами, стоит доверять автору и ориентироваться на прогноз или нет.
На чем компания зарабатывает
Компания делает облачное ПО для аналитики данных на предприятии. Клиенты TDC — корпоративные заказчики из самых разных отраслей. Согласно годовому отчету компании, выручка ее распределяется следующим образом.
Возобновляемая выручка — 79%. Продажа подписок на использование ПО компании. Валовая маржа сегмента — 67,1% от его выручки.
Консалтинговые услуги — 17%. Консультирование клиентов, установка и настройка программ и оборудования. Это самый низкомаржинальный сегмент компании, валовая маржа — 3,5% от его выручки.
Продажа лицензий и оборудования — 4%. Компания продает клиентам право на вечное использование своего ПО и разнообразные айтишные железки и оборудование для работы сети, все это для компании производит Flex. Валовая маржа сегмента — 46,6% от выручки.
Как инвестировать в акции и не прогореть
К сожалению, выручка в отчете подсчитана по регионам — нужно догадываться, сколько компания делает в США, а сколько — в Гватемале.
55,82% выручки дают Америки, валовая маржа географического сегмента — 61,6% от его выручки.
26,41% — это Европа, Ближний Восток и Африка, валовая маржа географического сегмента — 56,3% от его выручки.
Остальное — это Азиатско-Тихоокеанский регион с Японией, валовая маржа географического сегмента — 51,5% от его выручки.
Аргументы в пользу компании
Облака-облака-облака. Мы уже разбирали перспективы рынка облачных вычислений, так что повторяться не будем. Для TDC это означает рост выручки в долгосрочной перспективе — да и прибыли тоже, сектор очень маржинальный.
Цена. У компании P / E — 37, и может показаться, что это много, — но по американским меркам это на самом деле довольно скромный показатель, если учесть, что речь идет о перспективном технологическом бизнесе. Так что эти акции могут накачать гораздо больше. Тем более что капитализация у компании небольшая — 4,69 млрд долларов. Это сильно увеличивает возможность накачки акций розничными инвесторами, которые любят все яркое и блестящее.
Приоритеты. Основной рост в 2020 году у компании показал сегмент подписок: он прибавил 7%. А вот остальные сегменты сильно упали: выручка от консалтинговых услуг — на 28%, а от продажи лицензий и оборудования — на 31%.
Обвинить коронавирус в этом не получится, все дело в стратегическом переходе и обстоятельствах: консалтинговый бизнес переводят на обслуживание подписочного сегмента, отрубая нецелевые функции, а продажи оборудования у компании не в приоритете, поскольку акцент делается на продаже подписок.
Это позитивно сказывается на финансовом здоровье компании. Операционная прибыль в 2020 выросла на 60%, а показатели валовой маржи у указанных сегментов сильно увеличились: в сегменте оборудования и лицензий — в 2,3 раза, а в консалтинге — на 20%. Так что в долгосрочной перспективе это скорее плюс.
Покупка. Основной подписочный бизнес компании весьма маржинален, а капитализация у нее не очень большая, так что ее могут купить. Учитывая, что объем сделок по слиянию и поглощению в технологическом секторе в целом давно превышает средние показатели роста S&P 500 и в 2020 достиг планки 603 млрд долларов, покупка TDC, как не очень дорогой компании, — это очень вероятный вариант развития событий.