SQL Server 2022: Improved Performance for String Splitting and Parsing

In SQL Server 2022, Microsoft has introduced significant improvements in string splitting and parsing capabilities, making data manipulation more efficient. This blog explores these enhancements, providing practical examples using the JBDB database, and highlights a business use case to demonstrate the impact of these features.


πŸ“Š Business Use Case: Streamlining Data Analysis

Scenario:

A retail company, “TechShop,” collects customer feedback via online surveys. The responses are stored in a SQL Server database, and each response includes a comma-separated list of keywords describing the customer’s experience. The company wants to analyze these keywords to identify trends and improve its services.

Challenge:

With the previous SQL Server versions, splitting these comma-separated strings into individual keywords for analysis was resource-intensive and time-consuming, especially with large datasets. The goal is to leverage SQL Server 2022’s improved string splitting and parsing features to streamline this process.

πŸ› οΈ Key Features and Enhancements

1. STRING_SPLIT with Ordering Support

SQL Server 2022 introduces ordering support for the STRING_SPLIT function, allowing users to retain the order of elements in the original string. This enhancement is crucial for analyses where the sequence of data is significant.

2. Improved Performance

The performance of string splitting operations has been optimized, reducing execution time and resource consumption. This is particularly beneficial for large-scale data processing.

3. Enhanced Parsing Functions

Enhanced parsing functions provide more robust error handling and compatibility with different data types, improving data quality and reducing manual data cleaning efforts.

🧩 Example Demonstration with JBDB Database

Let’s dive into some examples using the JBDB database to showcase these improvements.

Setting Up the JBDB Database

First, we’ll set up a table to store customer feedback:

CREATE TABLE CustomerFeedback (
    FeedbackID INT IDENTITY(1,1) PRIMARY KEY,
    FeedbackText NVARCHAR(MAX)
);

INSERT INTO CustomerFeedback (FeedbackText)
VALUES
('Great service, fast shipping, quality products'),
('Slow delivery, excellent customer support'),
('Fantastic prices, will shop again, good variety'),
('Quality products, quick response time, friendly staff');

CREATE TABLE LargeCustomerFeedback (
    FeedbackID INT IDENTITY(1,1) PRIMARY KEY,
    FeedbackText NVARCHAR(MAX)
);

INSERT INTO LargeCustomerFeedback (FeedbackText)
VALUES
('Great service, fast shipping, quality products'),
('Slow delivery, excellent customer support'),
('Fantastic prices, will shop again, good variety'),
('Quality products, quick response time, friendly staff')
,('Great service1, fast shipping1, quality products1'),
('Slow delivery1, excellent customer support1'),
('Fantastic prices1, will shop again1, good variety1'),
('Quality products1, quick response time1, friendly staff1')
,('Great service2, fast shipping2, quality products2'),
('Slow delivery2, excellent customer support2'),
('Fantastic prices2, will shop again2, good variety2'),
('Quality products2, quick response time2, friendly staff2')
,('Great service3, fast shipping3, quality products3'),
('Slow delivery3, excellent customer support3'),
('Fantastic prices3, will shop again3, good variety3'),
('Quality products3, quick response time3, friendly staff3');

Using STRING_SPLIT with Ordering Support

Previously, STRING_SPLIT did not guarantee the order of elements. In SQL Server 2022, you can specify the order of elements:

SELECT 
    FeedbackID,
    value AS Keyword
FROM 
    CustomerFeedback
    CROSS APPLY STRING_SPLIT(FeedbackText, ',', 1)
ORDER BY 
    FeedbackID, ordinal;

In this query:

  • FeedbackText is split into individual keywords.
  • The ordinal column (optional) provides the order of elements as they appear in the original string.

Improved Performance Demonstration

To demonstrate the performance improvements, let’s compare the execution times for splitting a large dataset in SQL Server 2022 vs. a previous version. For simplicity, assume we have a LargeCustomerFeedback table similar to CustomerFeedback but with millions of rows.

Example Query for Large Dataset

SELECT 
    FeedbackID,
    value AS Keyword
FROM 
    LargeCustomerFeedback
    CROSS APPLY STRING_SPLIT(FeedbackText, ',', 1)
ORDER BY 
    FeedbackID, ordinal;

In practice, SQL Server 2022 processes this operation significantly faster, showcasing its enhanced string handling capabilities.

Counting Keywords from Feedback

To analyze the frequency of keywords mentioned in customer feedback, you can use the following query:

SELECT 
    value AS Keyword,
    COUNT(*) AS Frequency
FROM 
    CustomerFeedback
    CROSS APPLY STRING_SPLIT(FeedbackText, ',', 1)
GROUP BY 
    value
ORDER BY 
    Frequency DESC;

This query splits the feedback text into keywords and counts their occurrences, helping identify common themes or issues mentioned by customers.

Filtering Feedback Containing Specific Keywords

If you want to filter feedback entries containing specific keywords, such as “quality,” you can use:

SELECT 
    FeedbackID,
    FeedbackText
FROM 
    CustomerFeedback
WHERE 
    EXISTS (
        SELECT 1
        FROM STRING_SPLIT(FeedbackText, ',', 1)
        WHERE value = 'quality'
    );

This query finds feedback entries that mention “quality,” allowing the analysis of customer sentiments regarding product quality.

Extracting Unique Keywords

To extract unique keywords from all feedback entries, use the following query:

SELECT DISTINCT 
    value AS UniqueKeyword
FROM 
    CustomerFeedback
    CROSS APPLY STRING_SPLIT(FeedbackText, ',', 1);

This query provides a list of all unique keywords, helping identify the range of topics covered in customer feedback.

πŸ“ˆ Business Impact

By leveraging SQL Server 2022’s improved string splitting and parsing features, TechShop can:

  1. Accelerate Data Processing: The company can quickly analyze large volumes of customer feedback, allowing for timely insights into customer sentiment and trends.
  2. Improve Data Accuracy: The new features reduce the need for manual data cleaning and error handling, ensuring more accurate analysis.
  3. Enhance Customer Experience: By understanding customer feedback more efficiently, TechShop can make informed decisions to improve its services, leading to higher customer satisfaction and retention.

πŸŽ‰ Conclusion

SQL Server 2022’s advancements in string splitting and parsing offer substantial benefits for data-driven businesses. The enhancements in performance, ordering support, and robust error handling make it easier and faster to analyze complex datasets. For companies like TechShop, these features enable better customer insights and more agile decision-making.

πŸ’‘ Tip: Always test these features with your specific data and workload to fully understand the performance benefits and implementation considerations.

For more tutorials and tips on  SQL Server, including performance tuning and  database management, be sure to check out our JBSWiki YouTube channel.

Thank You,
Vivek Janakiraman

Disclaimer:
The views expressed on this blog are mine alone and do not reflect the views of my company or anyone else. All postings on this blog are provided β€œAS IS” with no warranties, and confers no rights.

SQL Server 2022: A Deep Dive into the APPROX_PERCENTILE_CONT Function with JBDB Database

SQL Server 2022 introduces several new features, one of the most exciting being the APPROX_PERCENTILE_CONT function. This function allows for efficient and approximate calculation of percentiles in large datasets, which can be particularly useful for analytics and data-driven decision-making. In this blog, we will explore the APPROX_PERCENTILE_CONT function in detail, using the JBDB database for practical demonstrations. We’ll start with a business use case, dive into the function’s capabilities, and provide a range of T-SQL queries for you to try. Let’s get started! πŸš€


Business Use Case: Customer Transaction Analysis πŸ’Ό

Consider a retail company that wants to analyze customer spending behavior. The company has a vast amount of transaction data stored in the JBDB database. To optimize marketing strategies and tailor promotions, they want to identify spending patterns across different customer segments.

For example, the company might want to know the 90th percentile of spending amounts to target high-value customers with exclusive offers. Calculating this percentile accurately in a large dataset can be resource-intensive. The APPROX_PERCENTILE_CONT function offers a solution by providing an approximate, yet efficient, calculation of percentiles.


Understanding the APPROX_PERCENTILE_CONT Function πŸ“Š

The APPROX_PERCENTILE_CONT function is designed to compute approximate percentile values for a set of data. This function is particularly useful when dealing with large datasets, as it offers a performance advantage by using approximate algorithms.

Syntax:

APPROX_PERCENTILE_CONT ( percentile ) WITHIN GROUP ( ORDER BY numeric_expression )
  • percentile: A value between 0 and 1 that specifies the desired percentile.
  • numeric_expression: The column or expression to calculate the percentile on.

Example 1: Basic Usage 🌟

Let’s calculate the 90th percentile of customer transaction amounts.

Setup:

USE JBDB;
GO

CREATE TABLE CustomerTransactions (
    TransactionID INT PRIMARY KEY,
    CustomerID INT,
    TransactionAmount DECIMAL(18, 2),
    TransactionDate DATE
);

INSERT INTO CustomerTransactions (TransactionID, CustomerID, TransactionAmount, TransactionDate)
VALUES
(1, 101, 50.00, '2023-01-15'),
(2, 102, 150.00, '2023-01-16'),
(3, 103, 300.00, '2023-01-17'),
(4, 101, 75.00, '2023-01-18'),
(5, 104, 200.00, '2023-01-19'),
(6, 105, 125.00, '2023-01-20'),
(7, 106, 400.00, '2023-01-21'),
(8, 102, 175.00, '2023-01-22');
GO

Query to Calculate 90th Percentile:

SELECT APPROX_PERCENTILE_CONT(0.90) WITHIN GROUP (ORDER BY TransactionAmount) AS Approx90thPercentile
FROM CustomerTransactions;

This result indicates that 90% of transactions are below $375. This insight can help the company focus on high-value customers who spend above this threshold.

Example 2: Analyzing Different Percentiles πŸ”

Let’s calculate different percentiles to understand the distribution of transaction amounts.

Query to Calculate Multiple Percentiles:

SELECT 
    APPROX_PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY TransactionAmount) AS Approx25thPercentile,
    APPROX_PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY TransactionAmount) AS Approx50thPercentile,
    APPROX_PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY TransactionAmount) AS Approx75thPercentile,
    APPROX_PERCENTILE_CONT(0.90) WITHIN GROUP (ORDER BY TransactionAmount) AS Approx90thPercentile
FROM CustomerTransactions;

These results provide a clear view of the transaction distribution, helping the company to tailor marketing strategies for different customer segments.

Comparing Percentile Results:

  • Compare approximate and exact percentile calculations for the 90th percentile:
SELECT 
    APPROX_PERCENTILE_CONT(0.90) WITHIN GROUP (ORDER BY TransactionAmount) AS Approx90thPercentile,
    PERCENTILE_CONT(0.90) WITHIN GROUP (ORDER BY TransactionAmount) OVER () AS Exact90thPercentile
FROM CustomerTransactions
group by TransactionAmount;

Segmenting Customers by Spending:

  • Identify customers whose spending is in the top 10%:
SELECT CustomerID, TransactionAmount
FROM CustomerTransactions
WHERE TransactionAmount >= (SELECT APPROX_PERCENTILE_CONT(0.90) WITHIN GROUP (ORDER BY TransactionAmount)
                             FROM CustomerTransactions);

Analyzing Spending Patterns Over Time:

  • Calculate monthly spending percentiles to identify trends:
SELECT 
    DATEPART(MONTH, TransactionDate) AS Month,
    APPROX_PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY TransactionAmount) AS MedianTransaction
FROM CustomerTransactions
GROUP BY DATEPART(MONTH, TransactionDate)
ORDER BY Month;

Combining Percentiles with Other Aggregations:

  • Find the average transaction amount for each percentile group:
SELECT 
    PercentileGroup,
    AVG(TransactionAmount) AS AvgTransactionAmount
FROM (
    SELECT 
        TransactionAmount,
        NTILE(4) OVER (ORDER BY TransactionAmount) AS PercentileGroup
    FROM CustomerTransactions
) AS SubQuery
GROUP BY PercentileGroup;

Conclusion 🏁

The APPROX_PERCENTILE_CONT function in SQL Server 2022 is a powerful tool for efficiently computing approximate percentiles in large datasets. By using this function, businesses can gain valuable insights into data distributions and make informed decisions based on these insights. Whether you’re analyzing customer spending, sales trends, or any other data, the APPROX_PERCENTILE_CONT function offers a quick and efficient way to understand your data.

Happy querying! πŸ˜„

For more tutorials and tips on SQL Server, including performance tuning and database management, be sure to check out ourΒ JBSWiki YouTube channel.

Thank You,
Vivek Janakiraman

Disclaimer:
The views expressed on this blog are mine alone and do not reflect the views of my company or anyone else. All postings on this blog are provided β€œAS IS” with no warranties, and confers no rights.